【发布时间】:2017-10-02 04:32:03
【问题描述】:
我刚开始使用 Angular 2 和 Typescript,最近遇到了一些我觉得很奇怪的行为。
我的班级是这样的:
export class Person{
id: number;
name: string;
height: number;
weight: number;
calculateBmi() {
return (weight/(height*height));
}
}
当使用对象字面量实例化一个新人时,像这样:
person: Person = {
id: 1,
name: "Jack Johnson",
height: 180,
weight: 70
};
我在 Visual Studio 2017 中收到(设计时)错误:
类型“{id: number, name: string, height: number, weight: number}”不可分配给“Person”类型 类型“{id: number, name: string, height: number, weight: number}”中缺少属性“calculateBmi”
它还声明它
无法将类型“{id: number, name: string, height: number, weight: number}”转换为“Person”类型:“Person”类型具有非可选属性“calculateBmi”,该属性在“类型”中不存在{id: number, name: string, height: number, weight: number}'.
因此,编译器似乎将“calculateBmi”视为属性,而不是函数。 解决方法当然是添加一个构造函数并使用它来实例化类,但我想了解是否有任何方法可以解决这个问题,以便我仍然可以使用对象文字?
谢谢, 乔恩
顺便说一句:我正在使用 Resharper 2017.x 但我不认为这是导致出现错误消息的原因。
【问题讨论】:
-
你告诉 TS 那个人应该是 tye Person。 Person 类型声明了一个方法 calculateBmi。因此,每次您有一个 Person 实例时,您都应该能够在该实例上调用 calculateBmi() 。但是您的对象文字没有这样的方法。所以你试图在脚上开枪,而 TypeScript 会阻止你这样做。如您所说,只需调用构造函数即可。
标签: angular typescript2.0