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;
评论