Я наткнулся на условный тип в TypeScript и нашел много расплывчатых определений его функциональности в TypeScript.
Рассмотрим в качестве примера следующий условный тип:
type NonNullable<T> = T extends null | undefined ? never : T
let MyType : NonNullable<string | null>;
Этот пост - это первый результат, когда я ищу тип условия в TypeScript в Google.
Он определяет T extends U ? X : Y
условный тип следующим образом:
На человеческом языке этот условный тип читается следующим образом: Если тип T присваивается типу U, выберите тип X; в противном случае выберите тип Y.
Итак, применив это определение к нашему примеру, я могу сказать, может ли (string | null
) назначаться типу null
? Ответ отрицательный, поэтому MyType
должно быть (string | null
). Что неверно
Другой пост здесь определяет его следующим образом, что имеет смысл:
Условные типы позволяют отфильтровать определенные элементы типа объединения.
В этом определении компилятор проверяет каждый возможный тип (позволяет называть его TT
) в типе объединения T, если этот тип (TT
) присваивается null
или undefined
компилятор отфильтрует их при создании определения для MyType
.
Вот мои вопросы:
- Какое определение правильное?
- Есть ли какие-нибудь лучшее (и общее) определение условных типов в TypeScript?