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'
解答
如果你不确定什么时候在 TypeScript 中使 用条件类型, 那就是你需要对类型使用“if”语句的时候。这正是我们这里要做的。
如果条件类型的计算结果为true
,我们需要取“true”分支,否则“false”分支:
type If<C, T, F> = C extends true ? T : F;
这样我们会得到一个编译错误,因为我们试图将C
赋值给布尔类型,而没有一个显式的约
束。因此,让我们通过在类型参数C
中添加extends boolean
来修复它:
type If<C extends boolean, T, F> = C extends true ? T : F;
评论