참고로 에러 메시지에는 에러 메시지 여러 개가 동시에 표시될 수 있습니다. 앞의 코드도 에러 메시지가 두 개, 즉 { hello: string; why: string }을 Example 타입에 대입할 수 없다는 에러와 'why' 속성이 Example 타입에 존재하지 않는다는 에러가 있는데, 두 번째 에러가 첫 번째 에러보다 더 구체적인 에러입니다. 따라서 에러를 분석할 때 에러 메시지가 여러 개 있다면 위에서 아래로 읽으면서 구체적인 에러의 위치를 찾아나가면 됩니다(이 책은 지면 관계상 모든 에러 메시지를 표시하는 대신 중요한 에러 메시지만 표시합니다).
함수에서도 같은 현상이 발생합니다.
interface Money {
amount: number;
unit: string;
}
const money = { amount: 1000, unit: 'won', error: '에러 아님' };
function addMoney(money1: Money, money2: Money): Money {
return {
amount: money1.amount + money2.amount,
unit: 'won',
}
}
addMoney(money, { amount: 3000, unit: 'money', error: '에러' });
// Argument of type '{ amount: number; unit: string; error: string; }' is not assignable to parameter of type 'Money'. Object literal may only specify known properties, and 'error' does not exist in type 'Money'.