Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
TypeScript infer: извлечение типов
infer — это ключевое слово для извлечения типов из сложных типовых выражений. Работает только внутри условных типов с extends.
Простой пример
type GetArray<T> = T extends Array<infer E> ? E : never;
type A = GetArray<string[]>; // string
type B = GetArray<number[]>; // number
Здесь infer E извлекает тип элементов массива.
Извлечение из Promise
type Unwrap<T> = T extends Promise<infer U> ? U : T;
type Result = Unwrap<Promise<string>>; // string
Извлечение типа возврата функции
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
const myFunc = (x: number) => 'hello';
type Result = GetReturnType<typeof myFunc>; // string
Извлечение из объекта
type GetValueType<T> = T extends { value: infer V } ? V : never;
type A = GetValueType<{ value: string }>; // string
type B = GetValueType<{ value: number }>; // number
Встроенные TypeScript utilities
TypeScript имеет встроенные типы, использующие infer:
ReturnType<T> // Возвращаемый тип функции
Parameters<T> // Параметры функции
Awaited<T> // Тип после await
Когда использовать
- Создание type utilities для переиспользования
- Интеграция с библиотеками (React, Redux, etc)
- Type-safe API интеграции
- Извлечение типов из generic типов
Практический пример
type ExtractComponentProps<T> = T extends React.ComponentType<infer P> ? P : never;
type ButtonProps = ExtractComponentProps<typeof Button>; // все props Button
infer — это мощный инструмент для продвинутой типизации. Со временем это становится вторым природой.
Важные точки
- infer работает только в условных типах (extends)
- Различие между covariant и contravariant
- Рекурсивные типы с infer для глубокого анализа
- Используй встроенные utilities когда возможно
Это инструмент, который превращает TypeScript из языка с типами в по-настоящему type-safe язык.