이번 아이템을 읽으면서 가장 충격적이였던 코드.
타입 PersonSpan은 Person과 Lifespan의 교집합이 아니라 합집합이다.
지금 생각해보면 당연할 수 있는데 처음에 보자마자 당연하게 교집합이라고 생각했다.
interface Person {
name: string;
}
interface Lifespan {
birth: Date;
death?: Date;
}
type PersonSpan = Person & Lifespan;
const ps: PersonSpan = {
name: 'Alan Turing',
birth: new Date('1912/06/23'),
death: new Date('1954/06/07'),
}; // OK
왜냐하면 위에서 type연산자는 속성이 아닌 값의 집합에 적용되기 때문이다.
기억하자.
keyof (A&B) = (keyof A)|(keyof B);
keyof (A|B) = (keyof A) & (keyof B);
더보기
제목 : 이펙티브 타입스크립트 : 동작 원리의 이해와 구체적인 조언 62가지
출판사 : 오랠리
지은이 : 댄 밴더캄
발행 : 2쇄 21년 11월 4일
'Book > Effective Typescript' 카테고리의 다른 글
Item 9. 타입 단언보다는 타입 선언을 사용하기 (0) | 2023.07.03 |
---|---|
Item 8. 타입 공간과 값 공간의 심벌 구분하기 (0) | 2023.06.29 |
Item 6. 편집기를 사용하여 타입 시스템 탐색하기 (0) | 2023.02.08 |
Item 5. any 타입 지양하기 (0) | 2023.02.08 |