xxxxxxxxxx
type Extract<T, U> = T extends U ? T : never;
type Exclude<T, U> = T extends U ? never : T;
type a = Exclude<'a' | 'b' | 'c', 'a'>;//'b' | 'c'
type b = Extract<'a' | 'b' | 'c', 'a' | 'b'>; // 'a' | 'b'
xxxxxxxxxx
type NumberOrString = number | string;
type OnlyNumber = Exclude<NumberOrString, string>;
// same as:
// type OnlyNumber = number;
const num: OnlyNumber = 5;
const str: OnlyNumber = 'hello'; // Error: Type '"hello"' is not assignable to type 'number'.