我正在寻找可以执行以下操作的打字稿Generic<>
:
Root
接口,我想覆盖此接口Root
接口,我想使任何属性为可选shallow
/顶级属性Overwrite
界面不应允许Root
之外的任何新属性interface Root {
name: string;
age: number | string;
hometown: string
}
interface Overwrite {
age: number; // overwriteing the union
hometown?: Root['hometown'] // making a property optional
}
应该工作:
type RL = Generic<Root, Overwrite> // should have `name`, `age`, `hometown`
由于Overwrite
不在lastName
中,因此应该显示Root
函数的错误:
type RL = Generic<Root,{lastName: string}>
答案 0 :(得分:0)
这是一个非常冗长的工作示例。
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>>>;