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

Зачем нужен infer

1️⃣ Как кратко ответить

Infer в TypeScript используется для извлечения типов из других типов. Это позволяет создавать более гибкие и динамичные типы, которые могут адаптироваться к изменениям в коде, улучшая читаемость и поддержку кода.

2️⃣ Подробное объяснение темы

В TypeScript infer — это ключевое слово, используемое в условных типах для извлечения типов из других типов. Это позволяет создавать более сложные и адаптивные типы, которые могут автоматически подстраиваться под изменения в коде.

Зачем это нужно

  1. Гибкость и адаптивность: infer позволяет создавать типы, которые автоматически адаптируются к изменениям в структуре данных. Это особенно полезно в больших проектах, где структура данных может часто меняться.

  2. Улучшение читаемости: Использование infer может сделать код более читаемым, так как он позволяет избежать дублирования кода и явного указания типов.

  3. Поддержка и масштабируемость: Код, использующий infer, легче поддерживать и масштабировать, так как изменения в одном месте автоматически отражаются в других местах, где используется извлеченный тип.

Как это работает

Рассмотрим пример использования infer для извлечения типа возвращаемого значения функции:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
  • type ReturnType<T>: Определяем новый тип ReturnType, который принимает тип T.
  • T extends (...args: any[]) => infer R: Проверяем, является ли T функцией. Если да, то используем infer R для извлечения типа возвращаемого значения этой функции.
  • ? R : any: Если T является функцией, то ReturnType<T> будет равен R (извлеченный тип возвращаемого значения). В противном случае, он будет равен any.

Пример использования

Предположим, у нас есть функция:

function getUser() {
  return { name: "Alice", age: 30 };
}

Мы можем использовать ReturnType для извлечения типа возвращаемого значения этой функции:

type User = ReturnType<typeof getUser>;
  • typeof getUser: Получаем тип функции getUser.
  • ReturnType<typeof getUser>: Используем наш условный тип ReturnType для извлечения типа возвращаемого значения функции getUser, который будет { name: string; age: number; }.

Таким образом, infer позволяет нам динамически извлекать и использовать типы, что делает код более гибким и поддерживаемым.

Тема: TypeScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки