If
Проблема
Реализовать вспомогательный тип If
. Он принимает условие C
и типы T
и F
.
Если условие C
правдивое, верните тип T
, иначе - F
. Например:
type A = If<true, "a", "b">; // expected to be 'a'
type B = If<false, "a", "b">; // expected to be 'b'
Решение
Проблема очень простая и подсказка на её решение уже скрывается в формулировке.
Для того чтобы реализовать тип If
, нам нужно использовать условные типы. Если
условие C
правдивое, то возвращаем тип T
, иначе - F
.
type If<C, T, F> = C extends true ? T : F;
Но с таким решением мы получим ошибку компиляции. TypeScript-у не нравится, что
тип C
пытаются присвоить к логическому типу. У нас нету никаких ограничений,
которые бы указали на то, что C
это логический тип.
Починим эту ошибку, добавив extends boolean
к тип параметру C
.
type If<C extends boolean, T, F> = C extends true ? T : F;
Комментарии