인수 자리에 변수로 값을 대입하면 에러가 발생하지 않지만, 객체 리터럴을 대입하면 에러가 발생합니다. 이러한 현상이 발생하는 이유는 객체 리터럴을 대입할 때와 변수를 대입할 때 타입스크립트가 다르게 처리하기 때문입니다.
객체 리터럴을 대입하면 잉여 속성 검사(Excess Property Checking)가 실행됩니다. 잉여 속성 검사는 타입 선언에서 선언하지 않은 속성을 사용할 때 에러를 표시하는 것을 의미합니다.
변수를 대입할 때는 객체 간 대입 가능성을 비교하게 됩니다. 2.13절에서 변수를 대입할 때의 상황을 자세하게 알아보겠습니다.
객체에서도 전개 문법과 나머지 속성을 사용할 수 있습니다.
const { prop: { nested, ...rest } } = { prop: { nested: 'hi', a: 1, b: true } };
// const nested: string
// const rest: { a: number, b: boolean }
const spread = { a: 'hi', b: 123 };
const obj = {...spread};
// const obj: { a: string, b: number }