这里有一个非常详细的工作示例。
export type Merge<A, B> = Omit<A, Extract<keyof A, keyof B>> & B;
export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export type Overwrite<A, B extends { [K in keyof B]: K extends keyof A ? A[K] : never }> =
Merge<Omit<Merge<A, B>, Extract<keyof A, keyof B>>, Pick<Merge<A, B>, Extract<keyof A, keyof B>>>;