Проверяет умение извлекать generic-параметры из существующих типов через условные типы и infer, что важно для написания переиспользуемых утилит типизации.
Извлечение generic-типа из другого типа в TypeScript выполняется через комбинацию условных типов (conditional types) и оператора infer. Условный тип имеет форму T extends U ? X : Y, а infer позволяет «захватить» часть типа в новую переменную прямо в позиции проверки.
Ключевое слово infer можно использовать только внутри ветки extends условного типа. Оно объявляет переменную типа, значение которой TypeScript выведет автоматически.
type ElementType<T> = T extends Array<infer U> ? U : never;
type A = ElementType<string[]>; // string
type B = ElementType<number[]>; // number
type C = ElementType<boolean>; // never
Извлечение типа из Promise, функции и кортежа:
type Unwrap<T> = T extends Promise<infer U> ? U : T;
type R = Unwrap<Promise<number>>; // number
type FirstArg<T> = T extends (a: infer A, ...rest: any[]) => any ? A : never;
type F = FirstArg<(x: string, y: number) => void>; // string
type Head<T> = T extends [infer H, ...any[]] ? H : never;
type H = Head<[boolean, string]>; // boolean
ReturnType, Parameters, Awaited, InstanceType.Итог: используйте infer внутри условных типов, когда нужно вытащить вложенный generic-параметр и построить переиспользуемую утилиту типизации.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию