← Назад к вопросам

Что такое infer в TypeScript?

2.4 Senior🔥 81 комментариев
#TypeScript

Комментарии (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 — это мощный инструмент для продвинутой типизации. Со временем это становится вторым природой.

Важные точки

  1. infer работает только в условных типах (extends)
  2. Различие между covariant и contravariant
  3. Рекурсивные типы с infer для глубокого анализа
  4. Используй встроенные utilities когда возможно

Это инструмент, который превращает TypeScript из языка с типами в по-настоящему type-safe язык.

Что такое infer в TypeScript? | PrepBro