我想从类型中排除一个属性。我该怎么做呢?

例如,我有

interface XYZ {
  x: number;
  y: number;
  z: number;
}

我要排除性质z

type XY = { x: number, y: number };

当前回答

在Typescript 3.5+:

interface TypographyProps {
    variant: string
    fontSize: number
}

type TypographyPropsMinusVariant = Omit<TypographyProps, "variant">

其他回答

我已经找到了解决方案,声明一些变量和使用扩散运算符推断类型:

interface XYZ {
  x: number;
  y: number;
  z: number;
}

declare var { z, ...xy }: XYZ;

type XY = typeof xy; // { x: number; y: number; }

它是有效的,但我很高兴看到一个更好的解决方案。

如果您更喜欢使用库,请使用ts-essentials。

import { Omit } from "ts-essentials";

type ComplexObject = {
  simple: number;
  nested: {
    a: string;
    array: [{ bar: number }];
  };
};

type SimplifiedComplexObject = Omit<ComplexObject, "nested">;

// Result:
// {
//  simple: number
// }

// if you want to Omit multiple properties just use union type:
type SimplifiedComplexObject = Omit<ComplexObject, "nested" | "simple">;

// Result:
// { } (empty type)

PS:你会发现很多其他有用的东西;)

在Typescript 3.5+:

interface TypographyProps {
    variant: string
    fontSize: number
}

type TypographyPropsMinusVariant = Omit<TypographyProps, "variant">

省略……

单一属性

type T1 = Omit<XYZ, "z"> // { x: number; y: number; }

多个属性

type T2 = Omit<XYZ, "y" | "z"> // { x: number; } 

属性有条件地

例如,所有的字符串类型:

type Keys_StringExcluded<T> = 
  { [K in keyof T]: T[K] extends string ? never : K }[keyof T]

type XYZ = { x: number; y: string; z: number; }
type T3a = Pick<XYZ, Keys_StringExcluded<XYZ>> // { x: number; z: number; }

在映射类型(PR)中使用TS 4.1键重映射/ as子句的更短版本:

type T3b = { [K in keyof XYZ as XYZ[K] extends string ? never : K]: XYZ[K] } 
// { x: number; z: number; }

字符串模式的属性

例如,排除getter(带有'get'字符串前缀的道具)

type OmitGet<T> = {[K in keyof T as K extends `get${infer _}` ? never : K]: T[K]}

type XYZ2 = { getA: number; b: string; getC: boolean; }
type T4 = OmitGet<XYZ2> //  { b: string; }

注意:TS 4.1支持上述模板文字类型。你也可以在这里写get${string}而不是get${infer _}。

更多的信息

选择,省略和其他实用程序类型

如何选择和重命名某些键使用Typescript?(重命名而不是排除)

操场上

打字稿3.5

从Typescript 3.5开始,省略helper将被包括在内

您可以直接使用它,并且在更新时应该删除自己对省略帮助器的定义。