If

Challenge

Implement the util type If<C, T, F> which accepts condition C, a truthy value T, and a falsy value F. C is expected to be either true or false while T and F can be any type.

For example:

type A = If<true, "a", "b">; // expected to be 'a'
type B = If<false, "a", "b">; // expected to be 'b'

Solution

Wie in der Aufgabe beschrieben, ist der Eingabetyp C immer ein boolischer Wert, weshalb wir unseren Typ wie folgt definieren müssen:

type If<C extends boolean, T, F>

Um nun bei true immer den ersten Wert, und bei false den zweiten Wert zurückzugeben, kann man einfach konditionelle Typen nutzen. Diese sind von der Syntax vergleichbar mit dem Ternary Operator in JavaScript.

type If<C extends boolean, T, F> = C extends true ? T : F;

References

Conditonal Types Ternary Operator