여 속성 체크의 한계
타입이 명시된 변수에 객체를 할당할 때 타입스크립트는 해당 타입의 속성이 있는지,그 외의 속성이 있는지 확인합니다.
위사진에손 Room 인터페이스에는 elephant 속성이 없기때문에 존재하지 않는다고 알려주고있습니다.
하지만 객체에 타입을 명시하지않고 obj객체에 타입을 할당해보면 에러가 나지않는걸 볼 수 있습니다.
obj의 타입은 {numDoors:number,ceilingHeightFt:number,elephant:string} 으로 추론되며 obj 타입은 Room 타입의 부분집합을 포함하므로 Room에 할당 가능하며 타입 체커도 통과합니다. 즉 타입스크립트가 elephant 는 string 타입이라고 추론을 한 것입니다.
첫 사진엔 타입스크립트의 "잉여 속성 체크" 라는 과정이 수행되었습니다. 그러나 두번째 사진과 같이 "잉여 속성 체크" 의 허점도 볼수 있습니다.
기억해야할점
1.객체 리터럴을 변수에 할당하거나 함수에 매개변수로 전달할 때 잉여 속성 체크가 수행된다.
2.잉여 속성 체크는 한계가 존재하며 임시 변수를 도입하면 잉여 속성 체크를 건너뛸 수 있다는 점을 기억해야한다.
3.잉여 속성 체크는 타입 단언문을 사용할 때에도 적용되지 않는다.
'Typescript' 카테고리의 다른 글
Effective Typescript - 타입과 인터페이스의 차이점 알기 (0) | 2023.04.09 |
---|---|
Effective Typescript - 함수 표현식에 타입 적용하기 (0) | 2023.04.09 |
Effective Typescript - 타입 단언보다는 타입 선언을 사용하기 (0) | 2023.04.08 |
Effective Typescript - any를 지양해야하는 이유 (0) | 2023.04.05 |
Typescript - implements 란? 그리고 private,protected 에 대해서 (0) | 2023.03.23 |