interface Vector1D { x: number; }
interface Vector2D extends Vector1D { y: number; }
interface Vector3D extends Vector2D { z: number; }
interface Person {
name: string;
}
interface Lifespan {
birth: Date;
death?: Date;
}
// type PersonSpan = Person & Lifespan;
const ps: PersonSpan = {
name: "동글",
birth: new Date("1995/01/01"),
death: new Date("2150/12/31"),
}; // 정상
type K = keyof (Person | Lifespan); //타입 never
// 유니온에 대한 keyof 공집합이어야만합니다.
// 명확히 표현하면 아래와 같이 표현할 수 있습니다.
keyof (A&B) = (keyof A) | (keyof B);
keyof (A|B) = (keyof A) & (keyof B);
ExClude
type T = Exclude<string|Date, string|number>;
type NonZeroNums = Exclude<number, 0>;
//type Exclude<T, U> = T extends U ? never : T;
//T에 오는 타입들 중 U에 오는 것들은 제외하겠다는 의미입니다.
<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)