哈喽,大家好,我是 SuperYing。首先声明这不是一篇有深度的文章,毕竟标题就已经把内容限制的死死的了,只是一篇简记而已。
直奔主题
NonNullable 类型是 ts 内置的用于过滤 null 和 undefined 的类型。
比如:
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 实现代码,很简单有没有。但是第一次看到它的时候是懵逼的。就这???这是怎么过滤掉 null 和 undefined 的?
当然了,有这样的疑问也充分的说明了我对 TS 知之甚少,仍需努力!!!
其实类型 {} 包括了除 null 和 undefined 之外的所有类型,再取与泛型 T 的 交叉类型,最终就达到了过滤掉 null 和 undefined 的目的。
注:
交叉类型:将多个类型合并为一个类型,可以获取所有类型的所有属性名,赋值的时候需要满足所有类型的结构
总结
这不是一篇水文,重点在于记录我对于 NonNullable 类型的理解,欢迎有同样疑惑的小伙伴阅读。大佬路过就不要浪费时间啦,不过也非常欢迎点评。
感谢阅读,我是 SuperYing,愿共同进步。