我正在尝试编写一种类型,与Pick
不同的是,该类型将从对象类型中删除某些属性。
它应该这样工作:
type ObjectType = {
key1: number,
key2: string,
key3: boolean,
key4: number[]
}
let obj: Remove<ObjectType, 'key2' | 'key4'>
obj
的类型应为:{key1:数字,key3:布尔值}
答案 0 :(得分:10)
如果我们需要删除属性key2
和key4
,这将起作用:
type Without<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
let obj: Without<ObjectType, 'key2' | 'key4'>
详细说明:
Exclude<keyof T, K>
返回'key1' | 'key3'
Pick<T, Exclude<keyof T, K>>
返回所需结果{ key1: number, key3: boolean }
答案 1 :(得分:1)
从TypeScript 3.5开始,有一个Omit
帮助程序可以按照您的描述工作。
type ObjectType = {
key1: number,
key2: string,
key3: boolean,
key4: number[]
}
let obj: Omit<ObjectType, 'key2' | 'key4'> // type is { key1: number, key3: boolean }
对于较早版本的TypeScript(> 2.8),您可以使用Pick
和Exclude
的组合,如爱德华在回答中提到的那样。
我经常使用辅助类型来使事情变得不太冗长(请注意,这是TS 3.5中使用的确切定义)
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
答案 2 :(得分:0)
您可以使用'utility-types'省略泛型。
import { Omit } from "utility-types"
interface IHouse {
rooms: number
gardenSize: number
toilets: number
}
type Appartment = Omit<IHouse, "gardenSize">