Closed
Description
Now we have Mapped Types and keyof, we could add a subtraction operator that only works on literal types:
type Omit<T, K extends keyof T> = {
[P in keyof T - K]: T[P];
};
type Overwrite<T, K> = K & {
[P in keyof T - keyof K]: T[P];
};
type Item1 = { a: string, b: number, c: boolean };
type Item2 = { a: number };
type T1 = Omit<Item1, "a"> // { b: number, c: boolean };
type T2 = Overwrite<Item1, Item2> // { a: number, b: number, c: boolean };