You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript启用strict模式时,为何never类型对象索引访问无报错?

问题:never类型的索引访问与点访问为何报错不同?

在tsconfig.json启用strict模式时,TypeScript编译器对never类型对象使用索引访问(如mystery['foo'])不报错,但点访问(如mystery.foo)却提示“Property 'foo' does not exist on type 'never'”。代码示例如下:

const mystery = ({ foo: 1 } as never)

console.log(mystery['foo'])  // 无报错
console.log(mystery.foo)  // 类型“never”上不存在属性“foo”。

export {}
原因分析

这是TypeScript类型系统对never类型的两种访问方式做了差异化处理导致的:

  • 点访问的严格校验逻辑:点访问(.)会直接校验目标类型是否明确包含该属性。never类型代表“不存在任何可能的值”,TypeScript会严格断言它没有任何属性,因此点访问mystery.foo会直接抛出属性不存在的错误。

  • 索引访问的特殊兼容设计:索引访问([])在TypeScript的类型逻辑中,被设计为对“可能包含任意属性”的类型具备更强兼容性。对于never类型,编译器认为既然它代表不可能存在的值,索引访问的操作本身永远不会被执行,因此不会触发错误——这种设计是为了兼容极端场景下的类型断言代码,避免不必要的报错阻塞编译。

本质上,TypeScript对never类型的点访问做了严格的属性存在性校验,而索引访问则因语法灵活性被赋予“跳过校验”的特殊处理,毕竟never类型的值根本不会实际存在,对应的访问代码永远不会运行。

内容的提问来源于stack exchange,提问作者Croad Langshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:15:32