gpt4 book ai didi

typescript - 如何使用 [key : string]: any 从 Typescript 类型中删除字段

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:42 26 4
gpt4 key购买 nike

我有一个来自 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];
}

最佳答案

依赖于 keyof 的映射类型(如 Exclude)在这里将无法正常工作,因为索引签名吸收了其他属性。 keyof A 是属性的联合,即 string

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

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

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

关于typescript - 如何使用 [key : string]: any 从 Typescript 类型中删除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50380176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com