interface ABC {
a: string;
b: string;
c: number;
}
function foo(abc: ABC) {
for (const k in abc) { // const k: string
const v = abc[k];
//~~~~~~ 'ABC' 타입에 인덱스 시그니처가 없기 때문에
// 엘리먼트는 암시적으로 'any'가 됩니다.
}
}
const x = {
a: 'a',
b: 'b',
c: 2,
d: new Date(),
};
foo(x); // 정상
• ABC 타입에 할당 가능한 객체에는 다른 속성이 존재할 수 있기 때문에, 타입스크립트는 ABC 타입의 키를 string 타입으로 선택한다.
[동호] 왜 굳이 타입스크립트는 ABC 타입의 키를 string으로 선택하는지 이해가 잘 안된다.
[효리] 순회 가능한 키 타입이 항상 string이어서 그런 것 같다. 심볼이 키가 될 수 있지만, 심볼은 열거 가능하지 않다.
[재희] 소스맵을 써서 디버깅을 자주 하시나요?
[동호] 안하지요
[재희] 해 보신분?
[동호, 진욱, 효리] 안 해봤습니다.