방금 Angular 2 및 Typescript로 재생하기 시작했으며, 최근에 아주 이상한 동작을 발견했습니다.Typescript : 클래스에 함수가있을 때 객체 리터럴을 사용하여 객체를 인스턴스화 할 수 없습니다.
내 클래스는 다음과 같습니다
export class Person{
id: number;
name: string;
height: number;
weight: number;
calculateBmi() {
return (weight/(height*height));
}
}
과 같이 객체 리터럴을 사용하여 새 사람을 인스턴스화 : 비주얼 스튜디오 2017 말하는
person: Person = {
id: 1,
name: "Jack Johnson",
height: 180,
weight: 70
};
나는 (설계 시간) 얻을 오류 :
유형 '{ID : 숫자, 이름 : 문자열, 높이 : 숫자, 무게 : 번호}'을 '사람'유형에 할당 할 수 없습니다. 재산권 'calculateBmi'형태없는 '{ID : 번호, 이름 : 문자열, 높이 : 수, 무게 : 숫자}'
은 또한 주장 그것이
형식을 변환 할 수 없습니다 '{ 유형 'Person': 유형 'Person'은 유형 '{id : number, name : string}에 존재하지 않는 선택적 속성'calculateBmi '를가집니다. , 높이 : 수, 무게 : 수} '.
그래서 transpiler는 'calculateBmi'를 속성이 아니라 속성으로 간주합니다. 해결 방법은 물론 생성자를 추가하고 클래스를 인스턴스화하는 데 사용합니다. 그러나 이것을 해결할 수있는 방법이 있는지 배우고 싶습니다. 그래도 객체 리터럴을 사용할 수 있습니까?
고맙습니다, 존
BTW : 내가 ReSharper에서 2017.x를 사용하고 있지만이 아닌이이 오류 메시지가 나타나는 원인을 것입니다 않습니다.
당신은 사람이 TYE 사람이 될 예정이다 TS 말하는 거를 만들 수 있습니다. 형식 Person은 calculateBmi 메서드를 선언합니다. 따라서 Person 인스턴스를 가질 때마다 해당 인스턴스에서 calculateBmi()를 호출 할 수 있어야합니다. 그러나 당신의 객체 리터럴은 그런 방법을 가지고 있지 않습니다. 그래서 발에서 자신을 쏘려고 노력하고 있으며, TypeScript는 그렇게하지 못하게합니다. 당신이 말했듯이, 생성자를 호출하십시오. –