挑战

实现一个工具If,它接受一个条件C,为真返回类型T,为假返回类型FC期望值 为truefalse,而TF可以为任意类型。

例如:

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;

参考