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
保留为typeObjectType
。如果要确保省略的字段有意义,请修改定义:type ExactOmit=Pick代码>(即,将any
更改为T
)。