Поиск по сайту
Ctrl + K
Вопросы по TS

Объясните условные типы в TypeScript

Условные типы в TypeScript являются мощным инструментом для создания гибких и адаптивных типов. Они позволяют разработчикам описывать типы, основываясь на других типах, что делает код более читаемым и безопасным. Условные типы состоят из трех частей: условие, истинный результат и ложный результат.

Синтаксис

Условные типы имеют следующий синтаксис:

T extends U ? X : Y

Где:

  • T — это тип, который мы проверяем.
  • U — это тип, с которым мы сравниваем T.
  • X — это тип, который будет возвращен, если условие истинно (т.е. T действительно является подтипом U).
  • Y — это тип, который будет возвращен, если условие ложно (т.е. T не является подтипом U).

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

Рассмотрим простой пример, где мы создадим тип, который будет возвращать true, если переданный тип является строкой, и false в противном случае.

type IsString<T> = T extends string ? true : false;

type Test1 = IsString<string>;  // true
type Test2 = IsString<number>;  // false
type Test3 = IsString<"Hello">; // true

В этом примере:

  • IsString<string> возвращает true, так как string является строкой.
  • IsString<number> возвращает false, потому что number не является строкой.
  • IsString<"Hello"> также возвращает true, так как литерал строки "Hello" является строкой.

Применение

Условные типы очень полезны при создании универсальных типов и библиотек, чтобы сделать код более гибким. Например, их можно использовать для создания комбинаций типов, которые зависят от условий, или для выбора типов в зависимости от переданных параметров.

Другой пример — создание типа, который выбирает тип значения в объекте по указанному ключу.

interface User {
    id: number;
    name: string;
    email: string;
}

type KeyOfUser = keyof User; // "id" | "name" | "email"

type ValueOfUser<K extends keyof User> = K extends keyof User ? User[K] : never;

type IdType = ValueOfUser<'id'>;    // number
type NameType = ValueOfUser<'name'>; // string

В этом примере ValueOfUser возвращает тип значения, соответствующего ключу из интерфейса User. Если мы передаем ключ 'id', мы получаем number, а если 'name', возвращается string.

Заключение

Условные типы в TypeScript — это мощный инструмент для разработки, который помогает создавать безопасный и универсальный код. Используя эти типы, вы можете создавать абстрактные и адаптивные конструкции, которые улучшают читаемость и поддержку вашего кода. Определение и использование условных типов может показаться сложным вначале, но с практикой вы сможете использовать их с легкостью.

Содержание:
Редактировать