Typescript “的对立面”;挑选;打字

Typescript “的对立面”;挑选;打字,typescript,Typescript,我正在尝试组合一个类型,它与拾取不同,将从对象类型中删除某些属性 它应该这样工作: type ObjectType = { key1: number, key2: string, key3: boolean, key4: number[] } let obj: Remove<ObjectType, 'key2' | 'key4'> type ObjectType={ 关键1:数字, 键2:字符串, 键3:布尔, 键4:数字[] } 让ob

我正在尝试组合一个类型,它与拾取不同,将从对象类型中删除某些属性

它应该这样工作:

type ObjectType = { 
    key1: number, 
    key2: string, 
    key3: boolean, 
    key4: number[] 
}

let obj: Remove<ObjectType, 'key2' | 'key4'>
type ObjectType={
关键1:数字,
键2:字符串,
键3:布尔,
键4:数字[]
}
让obj:移除

这里的
obj
的类型应该是:{key1:number,key3:boolean}

如果我们需要删除属性
key2
key4
,这将起作用:

type Without<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

let obj: Without<ObjectType, 'key2' | 'key4'>
type Without=Pick
让obj:没有
精化:

Exclude
返回
'key1'|'key3'


Pick
返回所需的结果
{key1:number,key3:boolean}

您可以使用“实用程序类型”忽略泛型

import { Omit } from "utility-types"

interface IHouse {
    rooms: number 
    gardenSize: number
    toilets: number
}

type Appartment = Omit<IHouse, "gardenSize">
从“实用程序类型”导入{Omit}
接口IHouse{
房间:多少间
花园大小:数量
厕所:数目
}
类型装置=省略

从TypeScript 3.5开始,有一个
省略
帮助程序可以按照您的描述工作

type ObjectType={
关键1:数字,
键2:字符串,
键3:布尔,
键4:数字[]
}
设obj:Omit//type为{key1:number,key3:boolean}

对于旧版本的TypeScript(>2.8),您可以使用Eduard在回答中提到的
Pick
Exclude
的组合

我经常创建一个helper类型,使事情不那么冗长(注意,这是TS 3.5中使用的确切定义)

类型省略=拾取;

您可以将拾取键简化为
K
@jcalz谢谢!更正。奇怪的是,
ommit
允许您省略原始字段以外的字段,即,在上面的示例中,
let obj:ommit
编译,而将
obj
保留为type
ObjectType
。如果要确保省略的字段有意义,请修改定义:
type ExactOmit=Pick(即,将
any
更改为
T
)。