타입스크립트는 변수에 직접적으로 할당되는 객체 리터럴에 대해서만 잉여 속성 체크를 수행한다.
임시 변수를 사용하여 객체 리터럴을 할당한 경우에는 이 임시 변수의 타입이 할당 대상 타입과 호환이 되는지 여부(구조적 타이핑)만 체크한다.
interface Room {
numDoors: number;
ceilingHeightFt: number;
}
const r1: Room = {
numDoors: 1,
ceilingHeightFt: 10,
elephant: 'present',
// ~~~~~~~~~~~~~~~~~~~ 개체 리터럴은 알려진 속성만 지정할 수 있으며
// 'Room' 형식에 'elephant' 이(가) 없습니다.
}
const obj = {
numDoors: 1,
ceilingHeightFt: 10,
elephant: 'present',
};
const r2: Room = obj // 정상
예시 하나 더
interface Options {
title: string;
darkMode?: boolean;
}
/* 구조적 타이핑 */
const o1: Options = document; // 정상
const o2: Options = new HTMLAnchorElement; // 정상
/* 잉여 속성 체크 */
const o: Options = { darkmode: true, title: 'Ski Free' };
// ~~~~~~ 'Options' 형식에 'darkmode'이(가) 없습니다.
interface Options {
darkMode?: boolean
[otherOptions: string]: unknown
}
onst o: Options = { darkmode: true } // 정상