Доки по разработке
This project is maintained by teniryte
inferПринципы
infer внутри условного типа позволяет «вырезать» тип параметра из обёртки (Array<...>, Promise<...>, Box<...>).never, если условие не выполняется — это гарантирует корректную типизацию в ошибочных кейсах.Пример
type ArrayUnpacker<T> = T extends Array<infer U> ? U : never;
type PromiseUnpacker<T> = T extends Promise<infer U> ? U : never;
class Box<T> {
constructor(private readonly value: T) {}
}
type BoxUnpacker<T> = T extends Box<infer U> ? U : never;
const stringArray = ['this', 'is', 'cool'];
type Element = ArrayUnpacker<typeof stringArray>; // string
Практика
AsyncResult<T> или ElementType<T> вместо ручного указания типов в каждом месте.infer возвращает объединение: например, при объединении различных массивов.infer с rest-кортежами для работы с первым/последним элементом (T extends [infer F, ...infer R]).