为何TypeScript不支持Type.property类型访问仅支持Type['property']查找类型?
为什么TypeScript不支持
Type.property形式的类型属性访问语法 TypeScript目前仅支持Type['property']形式的*lookup types(查找类型)*访问类型属性,没有推出直觉上可读性更强的Type.property点访问写法,核心是语法设计层面的兼容性考量,并非官方没有收到过相关社区诉求。
核心阻碍:无法消解的语法解析歧义
Type.property的写法会和现有命名空间(namespaces)的基础语法产生本质冲突:
- TypeScript命名空间从设计之初就支持
Namespace.member形式的点语法,用来引用命名空间下导出的值、类型或者嵌套命名空间,这是已经稳定运行多年的核心语法,覆盖海量存量代码 - 如果给类型属性访问也加上同名的点语法规则,编译器在解析阶段根本无法区分开发者写下的
A.B到底是指向命名空间A下导出的成员B,还是要访问类型A上的属性B,会直接破坏现有语法的解析一致性,带来大量边界场景下的解析错误,也会对存量代码造成不可控的破坏性影响。
相关提案的进展
社区曾多次发起支持Type.property类型访问写法的正式提案,经过TypeScript官方团队的多轮评估讨论,所有相关提案都因为上述语法冲突问题——目前没有找到能兼顾存量语法兼容性的可行实现方案——最终被关闭,该特性短时间内没有落地计划。
日常开发中如果更习惯点语法的书写逻辑,可以通过类型别名封装常用的属性访问,底层依然走标准查找类型的逻辑,不会触发语法冲突。
内容的提问来源于stack exchange,提问作者opensas
相关产品推荐
相关产品推荐

