Angular实例化自定义类时报TS2739缺少类方法错误如何解决?
问题根因
你触发报错的核心原因是没有按照类的正确实例化方式操作:你直接把仅包含属性的普通对象字面量赋值给了标注为User类型的变量,User类中定义的fullName、email两个方法在字面量对象中完全不存在,自然触发TS的类型校验报错。你初始声明时写的{} as User属于用类型断言强行绕过校验的不规范写法,无法解决实际缺少方法的问题。
另外你定义User类的email方法时存在大小写错误,把属性名fName写成了fname,即使类型问题解决后运行调用该方法也会报错,需要同步修正。
解决方案
方案1:实例化后单独赋值属性
最基础的修正方式,先通过new关键字创建真实的User类实例,再给实例的属性赋值,保留类的所有原生方法:
export class UserFormComponent implements OnInit { usrData: User = new User(); constructor() { } ngOnInit(): void { this.usrData.id = 123; this.usrData.fName = "user"; this.usrData.lName = "name"; } }
方案2:改造构造函数支持批量初始化
如果想要更简洁的初始化写法,可以给User类新增支持传入属性的构造函数:
export class User{ id: number = 0; fName: string = ""; lName: string = ""; // 新增可选初始化参数,支持传入部分属性赋值 constructor(initParams?: Partial<User>){ if(initParams) Object.assign(this, initParams); } fullName() { return this.fName + ' ' + this.lName; } // 修正原代码的属性名大小写错误 email() { return this.fName + "@sof.com"} }
改造后你可以直接在实例化时传入属性对象:
ngOnInit(): void { this.usrData = new User({ id: 123, fName: "user", lName: "name" }) }
内容的提问来源于stack exchange,提问作者elmarki
相关产品推荐
相关产品推荐

