ts NonNullable 类型

544 阅读1分钟

哈喽,大家好,我是 SuperYing。首先声明这不是一篇有深度的文章,毕竟标题就已经把内容限制的死死的了,只是一篇简记而已。

直奔主题

NonNullable 类型是 ts 内置的用于过滤 nullundefined 的类型。

比如:

type a = NonNullable<string | null | undefined>
const str1: a = '123' // 正常
const str2: a = null // 报错,Type 'null' is not assignable to type 'string'.
const str3: a = undefined // 报错,Type 'undefined' is not assignable to type 'string'.

不知道大家有没有看过 NonNullable 源码,或者大佬肯定是不用看都知道(小声哔哔:反正我是今天才留意到)。

type NonNullable<T> = T & {}

上面就是 NonNullable 实现代码,很简单有没有。但是第一次看到它的时候是懵逼的。就这???这是怎么过滤掉 nullundefined 的?

当然了,有这样的疑问也充分的说明了我对 TS 知之甚少,仍需努力!!!

其实类型 {} 包括了除 nullundefined 之外的所有类型,再取与泛型 T交叉类型,最终就达到了过滤掉 nullundefined 的目的。

注:

交叉类型:将多个类型合并为一个类型,可以获取所有类型的所有属性名,赋值的时候需要满足所有类型的结构

总结

这不是一篇水文,重点在于记录我对于 NonNullable 类型的理解,欢迎有同样疑惑的小伙伴阅读。大佬路过就不要浪费时间啦,不过也非常欢迎点评。

感谢阅读,我是 SuperYing,愿共同进步。