为何TypeScript中‘& {}’能排除null与undefined?
TypeScript中
& {}排除null和undefined的原理 首先要明确:TypeScript里的&和JavaScript里的按位与是完全不同的东西——TS中的&是**交叉类型(Intersection Type)**操作符,用来合并多个类型的特性,和JS的位运算没有关系。
为什么& {}能排除null和undefined?
- TypeScript的类型系统中,
{}(空对象类型)代表的是“可以被读取属性的非原始类型”,它兼容所有非null、非undefined的值(比如字符串、数字、对象、数组等,因为这些值都至少继承了Object的方法,比如toString)。 - 而
null和undefined是特殊的原始类型,它们不兼容{}类型——你不能读取null.toString()或undefined.toString()(运行时会报错,TS编译阶段也会提示类型不兼容)。 - 当你对一个可能包含null/undefined的类型
T使用交叉类型T & {}时,TS会只保留T中同时兼容{}的部分,也就是自动排除了null和undefined。
举个例子:
type MaybeString = string | null | undefined; type NonNullableString = MaybeString & {}; // 结果为 string
可靠的查询渠道
- TypeScript官方文档的交叉类型章节
- TypeScript Playground:可以直接编写类型测试代码,实时查看类型推导结果
- Stack Overflow:搜索关键词“TypeScript & {} exclude null undefined”,能找到大量开发者的讨论和案例
内容的提问来源于stack exchange,提问作者a human
相关产品推荐
相关产品推荐

