에러가 발생하네요. 이 방식은 자바스크립트에서는 유효한 방식으로, 자바스크립트에서는 이렇게 객체를 구분할 수 있습니다. 하지만 타입스크립트에서는 width 속성이 Y에 존재하지 않는다는 에러가 발생합니다. 아직 타입 좁히기가 이루어지지 않은 상황에서 width 속성에 접근했기에 에러가 발생한 것입니다.
타입스크립트에서는 다음과 같이 할 수 있습니다.
function objXorY(param: X | Y) {
if ('width' in param) {
param;
} else {
param;
}
}
// (parameter) param: X
// (parameter) param: Y
생소할 수 있지만 in 연산자도 자바스크립트에서 사용하는 문법입니다. 자바스크립트에서는 param.width를 해도 되고, 'width' in param을 해도 됩니다. width 속성이 존재하면 param은 X 타입이고, 존재하지 않으면 Y 타입입니다.