TypeScript中使用new创建箭头函数实例未报错的原因咨询
为什么用new调用箭头函数没报错?
首先明确两个核心事实:
- 原生JavaScript里,箭头函数不能作为构造函数使用,用
new调用一定会抛出TypeError: 箭头函数不是构造函数的运行时错误。 - TypeScript在默认严格模式下,编译阶段就会报错提示
"xxx" cannot be used as a constructor(错误码TS2351)。
你没收到报错,大概率是以下几种情况:
TypeScript严格模式未开启
如果你的tsconfig.json里strict设为false,或者关闭了strictFunctionTypes这类关键检查项,TypeScript会放宽类型校验。它会把箭头函数默认推断为Function类型,而Function类型被包含了构造签名,所以编译时不会触发错误。但这种情况下,代码真运行起来还是会抛JS错误。箭头函数被强行标注了构造函数类型
如果你给箭头函数显式加了包含构造签名的类型标注(比如type Ctor = new () => {}; const fn: Ctor = () => {}),在非严格模式下TypeScript不会检测到类型不兼容,允许你这么写,自然也不会报错。代码没真正执行到new箭头函数的逻辑
你可能只是写了代码,但实际运行时没走到调用new的那一行,误以为运行正常。真执行的话,JS引擎必然会抛出错误。
另外,如果你确认代码真的运行没报错,那大概率是你对代码的理解有误——比如你写的其实是返回对象的工厂函数,没用到new,只是误把函数调用当成了构造函数调用。
内容的提问来源于stack exchange,提问作者Lasitha Lakmal
相关产品推荐
相关产品推荐

