如何在TypeScript中定义空类型?多种尝试均未成功
TypeScript中如何定义不包含任何元素的空类型?
你要的这种完全没有任何值能匹配的空类型,TypeScript原生就提供了解决方案:never类型。
为什么之前的尝试不对?
type empty = {}:这个类型其实允许所有非原始类型(严格模式下排除null和undefined),甚至带属性的对象也能赋值给它,因为TS里的{}不是“空对象”,而是“没有额外属性约束的对象类型”。type empty = null:这个类型只包含null这一个有效值,显然不符合你要的“无任何元素”的需求。type empty;:这是语法错误,TypeScript的类型定义必须有明确的赋值。
用never实现真正的空类型
never是TS的底层类型,代表永远不会存在的值的类型,任何值都无法赋值给never类型的变量,反过来never可以赋值给任意类型。
示例代码:
type Empty = never; // 以下代码全部会报错,因为没有任何值能匹配never类型 const val1: Empty = {}; // 类型“{}”不能赋值给类型“never” const val2: Empty = null; // 类型“null”不能赋值给类型“never” const val3: Empty = 123; // 类型“number”不能赋值给类型“never” const val4: Empty = () => {}; // 类型“() => void”不能赋值给类型“never”
never的常见场景还包括永远不会返回的函数,比如抛出错误的函数:
function throwFatalError(): never { throw new Error("程序终止,不会返回任何值"); }
内容的提问来源于stack exchange,提问作者Brian Duong
相关产品推荐
相关产品推荐

