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;
Комментарии