创建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
相关产品推荐
相关产品推荐

