0Pricing
TypeScript Academy · Урок

T extends U ? X : Y на практике

Пишите практические условные типы; изучите распределение по объединениям и способы отключить его при необходимости.

«T extends U ? X : Y на практике» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.

Введение

Цель: использовать условные типы для описания логики в системе типов и понимать, когда они распределяются по объединениям.

  • Шаблон: T extends U ? X : Y
  • Распределение: ветвь применяется к каждому элементу объединения

Базовый шаблон

Условные типы выбирают ветвь в зависимости от того, может ли тип T быть присвоен типу string.

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

type A = IsString<string>
//   ^ true

type B = IsString<number>
//   ^ false

Распределение

При использовании независимого T проверка выполняется для каждого элемента объединения: string | number превращается в string[] | number[].

type ToArray<T> = T extends any ? T[] : never

type C = ToArray<string | number>
// distributes:
// C is string[] | number[]

Отключение распределения

Оберните T в кортеж ([T]), чтобы предотвратить распределение и рассматривать объединение целиком.

type ToArrayNoDist<T> = [T] extends [any] ? T[] : never

type D = ToArrayNoDist<string | number>
// no distribution:
// D is (string | number)[]

Практическое применение

Пример этого шаблона: для массивов ElementType использует infer, чтобы извлечь тип элемента; в противном случае тип оставляется без изменений.

type NonEmptyArray<T> = T[] extends [] ? never : T[]
// Usually better:
// type ElementType<T> = T extends ReadonlyArray<infer U> ? U : T

type E1 = ElementType<string[]>
//   ^ string

type E2 = ElementType<readonly number[]>
//   ^ number

type E3 = ElementType<string>
//   ^ string

Советы

Советы: делайте условия простыми; учитывайте развёртывание; повторно используйте вспомогательные типы; добавляйте файлы тестов для сложных сочетаний.

// Tips
// - Keep conditions simple; deep nesting harms readability
// - Document distribution behavior for teammates
// - Prefer helper aliases (ElementType, Awaited) for reuse
// - Watch for De Morgan like logic when composing unions

Проверка распределения

Быстрая проверка: когда условные типы распределяются?

Повторение

Повторение: условные типы моделируют логику в типах. Распределение применяется к каждому элементу объединения; чтобы отключить его, используйте обёртку-кортеж.

Часто задаваемые вопросы

Урок «T extends U ? X : Y на практике» бесплатный?

Да — полный текст урока «T extends U ? X : Y на практике» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «T extends U ? X : Y на практике»?

Пишите практические условные типы; изучите распределение по объединениям и способы отключить его при необходимости. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.

Сколько времени занимает урок «T extends U ? X : Y на практике»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. T extends U ? X : Y на практике
  2. infer для служебных типов в стиле ReturnType
  3. Встроенные типы: ReturnType, Parameters, InstanceType и другие
← Назад к TypeScript Academy