객체의 속성과 관련한 특이한 점이 있습니다. 기본적으로 객체를 타이핑할 때 선언하지 않은 속성에 대해서는 에러가 발생합니다.
interface Example {
hello: string;
}
const example: Example = {
hello: 'hi',
why: '나만 에러야',
}
// Type '{ hello: string; why: string; }' is not assignable to type 'Example'. Object literal may only specify known properties, and 'why' does not exist in type 'Example'.
const obj = {
hello: 'hi',
why: '나는 에러 아냐',
}
const example2: Example = obj;
Example 인터페이스에 why 속성이 없으므로 example 변수에서 에러가 발생합니다. 그런데 example2에서는 에러가 발생하지 않습니다. 둘의 차이가 무엇일까요? example 변수에는 객체 리터럴을 대입했고, example2 변수에는 obj 변수를 대입했습니다. 객체 리터럴을 대입했냐, 변수를 대입했냐에 따라 타입 검사 방식이 달라집니다.