더북(TheBook)

{}toString 메서드를 호출하면 [object Object]로 변환됩니다. ({}).toString()해보면 됩니다. 따라서 obj[{}]wow가 됩니다.

다만 타입스크립트에서는 배열의 타이핑을 위해 속성 키를 number로 하는 것을 허용합니다. 따라서 타입스크립트에서 속성 키로 가능한 타입은 stringsymbol, number가 됩니다. number는 자바스크립트에서 string으로 변환되고요.

한 가지 더 알아두어야 할 점이 있습니다. 2.7.4절에서 {} 타입은 객체의 타입이 아니라 nullundefined를 제외한 모든 타입을 의미한다고 말했는데요. 속성이 없는 인터페이스도 비슷한 역할을 합니다.

interface NoProp {}
const obj: NoProp = {
  why: '에러 안 남',
}
const what: NoProp = '이게 되네?';
const omg: NoProp = null; 
// Type 'null' is not assignable to type 'NoProp'.

nullundefined를 제외한 값을 대입할 수 있습니다. 이렇게 만든 이유는 일반적으로 속성이 하나도 없는 빈 객체로 타입을 선언할 일이 없기 때문입니다. 따라서 빈 객체 타입을 특별하게 nullundefined를 제외한 모든 값을 가리키는 타입으로 만들었습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.