我有一个来自npm模块的类型定义,想要删除param1或使其成为可选
type A = {
[key: string]: any,
param1: string
param2: string
}
我尝试过Typescript建议的Omit功能,但效果不好
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
type B = Omit<A,"param1">
// expect: B = {[key:string]: any, param2: string}
// actual: B = {[key:string]: any}
我正在使用typescript 2.8.3。我怎样才能得到预期的结果?
更新: 我做了更多的挖掘并发现了以下内容。
// this copies index and extra type correctly
type B = {
[P in keyof A]: A[P];
}
// this only copies index type
type C = keyof A
type B = {
[P in C]: A[P];
}
答案 0 :(得分:0)
依赖于keyof
的映射类型(如Exclude
)在此处无法正常工作,因为索引签名会吸收其他属性。 keyof A
是属性的联合,即string
。
通过向现有密钥添加?
修饰符并为某些属性删除它们,可能会以相反的方式解决问题:
type B = Partial<A> & { param1: A['param1'] };
由于这对于多个属性来说会变得很麻烦,因此可能必须复制和修改类型。