Typescript는 형식의 모양을 검사하고 필요한 속성이 있는지 확인할 수있는 한 추가 속성을 허용 할 수 있습니다.
예를 들어, 당신은 유형을 정의 할 수 있습니다와 같은 기능 :
type Coordinates = {latitude: number, longitude: number};
function logCoordinates(coords: Coordinates) {
console.log('coordinates:', coords.latitude, coords.longitude);
}
와 타이프 라이터 행복하게 이러한 호출 중 하나를 받아 들일 것입니다 :
logCoordinates({latitude: 1, longitude: 2});
// assuming we have a CoordinateClass know to have lat and long
const coordinates = new CoordinateClass(1, 2);
logCoordinates(coordinates);
유형 주석은 계약의 모양을 설명합니다. 우리가 증명할 수있는 어떤 매개 변수도 계약을 만족시킬 수 있습니다. 그러나 추가 속성이 항상 허용되는 것은 아닙니다.
당신이 여분의 특성을 가지고있는 경우
는 객체 리터럴을 전달하는 - 클래스의 인스턴스가이 문제를 가지고 있지 않습니다 - 당신이 원하는 형태로 캐스팅해야 할 수 있습니다
logCoordinates(<Coordinates>{latitude: 1, longitude: 2, altitude: 3});
당신이 더 많은 것을 해결할 수 있습니다 견고 어떤 타의 추종을 불허하는 키 수용에 의해 캐스팅 할 필요 제거하는 교차 형, as described here 사용 : 당신의 대답에 대한
type Coordinates = {latitude: number, longitude: number} & {[key: string]: number};
감사합니다; 당신은 왜 (단지 당신이 Angular2의 클래스에 대해 말하고 있었는지) "클래스 인스턴스에는이 문제가 없습니다"라는 이유를 명확히 할 수 있습니까? – dragonmnl
@dragonmnl 추가 속성을 막는 유형 검사는 클래스 인스턴스가 아닌 객체 리터럴에만 적용됩니다 (TS, ES6 또는 기존). – ssube