typescript 如何判断 unknown, undefined, never
📁

typescript 如何判断 unknown, undefined, never

Tags
typescript
Update
Aug 26, 2021 06:05 PM
Create
Aug 25, 2021 02:21 PM

never

之前说过🧻typescript Distributive Conditional Types ts 的分配率,这使得我们比较难以用泛型去判断 never 类型,比如下面的代码,我们希望如果 T 是 never 的话,输出是true, 以便于我们做后续的一些判断。但由于分配率的关系,如果我们输入的类型是 never,条件语句一次都不会执行,输出为 (即 never)
type BadIsNever<T>= T extends never ?  true : false
我们可以利用之前讲的规则,在 condition 的时候对泛型进行一定的修改,就不会再执行结合律了,代码也就能按照我们想的那样判断出结果了:
type IsNever<T>= [T] extends [never] ?  true : false

undefined, unknown

还有这两个,感觉和 never 差不多的,应该怎么判断?
我们还是可以用之前的方法:
type Foo1 = [never] extends [undefined] ? 1: 0 // 1
type Foo2 = [never] extends [unknown] ? 1: 0 // 1
type Foo3 = [undefined] extends [unknown] ? 1: 0 // 1
type Foo4 = [undefined] extends [never] ? 1: 0 // 0
type Foo5 = [unknown] extends [undefined] ? 1: 0 // 0
type Foo6 = [unknown] extends [never] ? 1: 0 // 0
可以得出这样的结论:
"never" {extends} "undefined" {extends} "unknown"
// 如果把他们想成集合,则三者是一个套娃的关系
"never" < "undefined" < "unknown"
知道了这层关系,其实就很好判断一个类型是不是三者或者其中之一了