我想从类型中排除一个属性。我怎样才能做到这一点?
例如我有
interface XYZ { x: number; y: number; z: number; }
我想排除财产z来获得
z
type XY = { x: number, y: number };
在 TypeScript 3.5 中,该Omit类型被添加到标准库中。请参阅下面的示例以了解如何使用它。
Omit
在 TypeScript 2.8 中,该Exclude类型被添加到标准库中,允许省略类型简单地编写为:
Exclude
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
您不能Exclude在 2.8 以下的版本中使用该类型,但您可以为它创建一个替换,以便使用与上述相同的定义。但是,这种替换只适用于字符串类型,因此不如Exclude.
// Functionally the same as Exclude, but for strings only. type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T] type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>
以及使用该类型的示例:
interface Test { a: string; b: number; c: boolean; } // Omit a single property: type OmitA = Omit<Test, "a">; // Equivalent to: {b: number, c: boolean} // Or, to omit multiple properties: type OmitAB = Omit<Test, "a"|"b">; // Equivalent to: {c: boolean}