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

创建TechnicalContactInfo实例报错:无法对无构造签名表达式使用new

解决TypeScript中"Cannot use 'new' with an expression whose type lacks a call or construct signature"错误

嘿,这个问题我太熟悉了!你遇到的报错根源其实是变量名和类名重名导致的标识符冲突,咱们一步步拆解来看:

错误原因分析

看你创建实例的代码:

var TechnicalContactInfo:TechnicalContactInfo = new TechnicalContactInfo();

你用var声明了一个名为TechnicalContactInfo的变量,而这个名字刚好和你定义的类完全一致。在TypeScript的作用域规则里,当你在同一个作用域内用同名变量覆盖了类的标识符后,new TechnicalContactInfo()里的TechnicalContactInfo已经不再指向你的类,而是指向你刚声明的那个未完成初始化的变量——这个变量显然没有构造函数的签名,所以TypeScript会抛出那个错误。

快速解决方案

只需要把变量名改成和类名不同的名称就行,按照TypeScript的常规命名规范,变量建议用小驼峰命名:

// 变量名改用小驼峰,避免和类名冲突
var technicalContactInfo: TechnicalContactInfo = new TechnicalContactInfo();

这样一来,TechnicalContactInfo仍然指向你定义的类,而technicalContactInfo作为类的实例变量,两者就不会产生冲突了。

额外优化建议

另外,你定义的类里PER01和PER02属性没有指定类型,这在TypeScript里不够严谨,建议补充上对应的类型注解(比如根据业务需求用string、number等):

export class TechnicalContactInfo {
  constructor(){
    this.Communication = [];
  }
  /** @description ContactFunctionCode */
  PER01: string; // 替换成你实际需要的类型
  /** @description ContactName */
  PER02: string; // 替换成你实际需要的类型
  /** @description Communication */
  Communication: Communication[];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:16