type TName = {
name: string;
};
type TAge = {
age: number;
};
const taeyeon = {
name: '태연',
age: 32,
};
변수 taeyeon의 타입을 TName으로 선언하면 age 프로퍼티에서 에러가 나고, 타입을 TAge로 선언하면 name 프로퍼티에서 에러가 날 것이다.
하지만 다음과 같은 경우를 보자.
const testName: TName = taeyeon;
새로운 testName이라는 변수를 TName으로 선언했다. 여기까지만 보면 testName은 name이라는 프로퍼티만 가지면 된다. 하지만 이 변수에 taeyeon을 할당했다. taeyeon은 name 뿐만 아니라 age 프로퍼티까지도 가지고 있다. 뭔가 이상한데 에러가 발생하지 않는다.
taeyeon이라는 객체를 가진 변수가 다른 변수에 할당할 때 타입스크립트는 TName 타입을 보는 것이 아니라, taeyeon의 타입을 보게 된다.
그래서 초과속성이 허락이 되는 것이다.
초과속성을 허락하지 않으려면 다음과 같이 변수 형태가 아니라 객체 리터럴로 넣어줘야 한다.
const example: TName = {
name: '태연',
age: 32, // age에서 에러가 남
};