Что такое infer в TypeScript?
Продвинутые типы
`infer` объявляет переменную типа внутри условного типа: TypeScript сам выводит её значение из сопоставления с шаблоном.
Примеры
type ElementType<T> = T extends (infer U)[] ? U : never;
type A = ElementType<string[]>; // string
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type B = MyReturnType<() => number>; // number
type Unwrap<T> = T extends Promise<infer V> ? V : T;
type C = Unwrap<Promise<User>>; // UserГде используют
- встроенные типы
ReturnType,Parameters,Awaited,InstanceTypeпостроены наinfer; - разбор строковых шаблонов:
type Param<S> = S extends `${string}:${infer Name}/${string}` ? Name : never;
type D = Param<'/users/:id/posts'>; // 'id'- извлечение частей типов библиотек (props компонента, payload экшена).
Ограничения
infer работает только внутри extends условного типа; можно ограничить выводимый тип: infer U extends string.
Коротко для собеседования
infer вводит переменную типа в условном типе и выводит её из сопоставления — так извлекают тип элемента массива, результата функции, значения промиса или части строки.
Подробнее: TypeScript Handbook — Inferring Within Conditional Types