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 — локальная установка не требуется.
Все уроки этого курса
- T extends U ? X : Y на практике
- infer для служебных типов в стиле ReturnType
- Встроенные типы: ReturnType, Parameters, InstanceType и другие