对象字面量含new属性无法点访问却可被构造,此为预期功能吗?
这是TypeScript的预期行为吗?
是的,这确实是TypeScript的预期行为,核心原因在于它对构造函数类型的自动推断规则:
- 当你定义一个包含名为
new的方法的对象字面量时,TypeScript会自动将这个对象推断为构造函数类型(即符合new (参数: 类型) => 返回值类型的签名)。 - 此时尝试用点语法
a.new(35)访问属性时,TypeScript的解析器会优先把new识别为构造操作符的关键字,而非对象的属性名,因此会触发错误。 - 而
new a(35)能正常运行,正是因为TypeScript已经把a当成了可被new调用的构造函数,调用时会匹配它的new方法签名。
如果想要访问这个名为new的属性方法,你可以改用方括号语法来明确指定访问对象属性:
// other.ts import {a} from "./index" a['new'](35) // 有效,能正确调用该属性方法
内容的提问来源于stack exchange,提问作者javascriptGivesMeAnxiety
相关产品推荐
相关产品推荐

