我刚刚开始使用 Angular 2 和 Typescript,最近遇到了一些我觉得很奇怪的行为。
我的班级是这样的:
export class Person{
id: number;
name: string;
height: number;
weight: number;
calculateBmi() {
return (weight/(height*height));
}
}
Run Code Online (Sandbox Code Playgroud)
当使用对象文字实例化一个新人时,如下所示:
person: Person = {
id: 1,
name: "Jack Johnson",
height: 180,
weight: 70
};
Run Code Online (Sandbox Code Playgroud)
我在 Visual Studio 2017 中收到(设计时)错误:
类型“{id:number,name:string,height:number,weight:number}”不可分配给类型“Person”类型“{id:number,name:string,height:number,重量:数量}'
它还指出,它
无法将类型“{id:number,name:string,height:number,weight:number}”转换为类型“Person”:类型“Person”具有非可选属性“calculateBmi”,该属性在类型“{id:”中不存在数字,名称:字符串,高度:数字,重量:数字}'。
因此,转译器似乎将“calculateBmi”视为属性,而不是函数。解决方法当然是添加一个构造函数并使用它来实例化该类,但我想了解是否有任何方法可以解决这个问题,以便我仍然可以使用对象文字?
谢谢乔恩
顺便说一句:我正在使用 Resharper 2017.x,但我不认为这是导致出现错误消息的原因。