关键词: TypeScript, TypeChallenge
实现一个工具类If, 它接受三个泛型参数:
- 条件
C, condition, 应该是true或者false中的一个 - 条件为真的返回类型
T, 可以为任意类型 - 条件为假的返回类型
F, 可以为任意类型
举个栗子:
type A = If<true, "a", "b">; // expected to be 'a'
type B = If<false, "a", "b">; // expected to be 'b'type If<C extends boolean, T, F> = C extends true ? T : F;首先限制 C 为 true, false 之一, 即为 boolean 类型
如果C为 true, 则C是true的子集, 则C extends true成立, 返回T, 反之返回F
伪码如下
function If(C, T, F) {
if(C is not subset of boolean) throw new Error()
if(C is subset of true) return T
else return F
}