Typescript:当类

时间:2017-05-04 06:26:22

标签: angular typescript2.0

我刚开始玩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,但我不这就是导致出现错误信息的原因。

1 个答案:

答案 0 :(得分:4)

您的实例化是错误的。用新的

调用构造函数
person: Person = new Person()

或创建完整的对象文字

person: Person = {
    id: 1,
    name: "Jack Johnson",
    height: 180,
    weight: 70,
    calculateBmi: function() {...}
  };