type-challenges if

108 阅读1分钟

if

实现一个if类型,它接收一个条件类型C,一个判断为真时的返回类型T,以及一个判断为假时的返回类型FC只能是true或者false, TF可以是任意类型

例如:

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

结束了吗?还没,仔细看一下还没过,卡在

截屏2022-07-07下午6.19.19.png

这里了。

由于题目中了解到: C只能是true或者false

那么null这种情况是不存在的。

所以最终答案为:

type If<C extends Boolean, T, F> = C extends true ? T : F

这个时候就完全通过所有例子了。

知识点

  • extends

  • 三元

  • 参数类型范围约束

知其然知其所以然