PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые типы

Зачем нужны конструкции с помощью extends в TypeScript?

Продвинутые типы

Ключевое слово `extends` в TypeScript используется в трёх ролях: наследование, ограничение дженериков и условные типы.

Наследование интерфейсов и классов

interface Animal { name: string }
interface Dog extends Animal { breed: string }

Ограничение дженерика

function getLength<T extends { length: number }>(value: T) {
  return value.length;
}

Тип-параметр обязан быть совместим с указанным типом.

Условные типы

type IsString<T> = T extends string ? true : false;
type ElementType<T> = T extends (infer U)[] ? U : T;

Позволяют вычислять типы: выбрать вариант, извлечь часть типа через infer, отфильтровать объединение (так работают Exclude, ReturnType, Awaited).

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

  • переиспользовать формы объектов без копирования;
  • писать дженерики, которые принимают только подходящие типы;
  • строить вычисляемые типы для библиотек и утилит.

Коротко для собеседования

extends — это наследование интерфейсов и классов, ограничение дженериков и условные типы (T extends U ? X : Y) с infer.

Подробнее: TypeScript Handbook — Conditional Types

Другие вопросы раздела