If
题目
Github: If
实现一个 IF
类型,它接收一个条件类型 C
,一个判断为真时的返回类型 T
,以及一个判断为假时的返回类型 F
。 C
只能是 true
或者 false
, T
和 F
可以是任意类型。
type A = If<true, 'a', 'b'> // expected to be 'a'
type B = If<false, 'a', 'b'> // expected to be 'b'
解题思路
通过泛型类型约束 C
为 boolean
, 条件类型推断 C
计算结果是否为 true
。
答案
type If<C extends boolean, T, F> = C extends true ? T : F
验证
type a = If<true, 'a', 'b'>
type b = If<false, 'a', 'b'>
type cases = [
Expect<Equal<a, 'a'>>,
Expect<Equal<b, 'b'>>,
]