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'
例子1
type cases = [
Expect<Equal<If<true, 'a', 'b'>, 'a'>>
]
传入true,返回'a'
例子2
type cases = [
Expect<Equal<If<false, 'a', 'b'>, 'b'>>
]
传入false,返回'b'
解析
因为true 和 false 是布尔值的对立的,非true即false,所以很自然就想到三元 ? 'a' : 'b', 不是返回'a'既是返回'b'
所以
type If<C, T, F> = C extends true ? T : F
结束了吗?还没,仔细看一下还没过,卡在
这里了。
由于题目中了解到: C只能是true或者false
那么null这种情况是不存在的。
所以最终答案为:
type If<C extends Boolean, T, F> = C extends true ? T : F
这个时候就完全通过所有例子了。
知识点
-
extends
-
三元
-
参数类型范围约束
知其然知其所以然