首页 > 解决方案 > 如何使用 [key: string] 从 Typescript 类型中删除字段:任何

问题描述

我有一个来自 npm 模块的类型定义,并且想要删除 param1 或使其成为可选

type A = {
    [key: string]: any,
    param1: string
    param2: string
}

我尝试了 Typescript 建议的省略功能,但效果不佳

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}

我正在使用打字稿 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];
}

标签: typescript

解决方案


依赖keyoflike的映射类型在Exclude这里无法正常工作,因为索引签名吸收了其他属性。keyof A是属性的并集,即string.

?通过向现有键添加修饰符并为某些属性删除它们,可能会以相反的方式解决问题:

type B = Partial<A> & { param1: A['param1'] };

由于这对于多个属性会变得很麻烦,因此可能必须复制和修改类型。


推荐阅读