&과 |가 헷갈릴 수도 있습니다. 앞의 코드를 다음과 같이 바꿔봅시다. & 연산자를 | 연산자로 바꾸었습니다.
type Animal = {
name: string;
}
type Cat = Animal | {
meow(): void;
}
type Name = Cat['name'];
// Property 'name' does not exist on type 'Cat'.
| 연산자를 사용하면 Cat 타입은 Animal 타입이거나 { meow(): void } 타입이라는 의미가 됩니다. Cat 타입이 Animal 타입인 경우에는 name 속성이 있지만, Cat 타입이 { meow(): void } 타입인 경우에는 name 속성이 없으므로 에러가 발생합니다.