typescript - 如何使用 [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];
}
解决方案
依赖keyof
like的映射类型在Exclude
这里无法正常工作,因为索引签名吸收了其他属性。keyof A
是属性的并集,即string
.
?
通过向现有键添加修饰符并为某些属性删除它们,可能会以相反的方式解决问题:
type B = Partial<A> & { param1: A['param1'] };
由于这对于多个属性会变得很麻烦,因此可能必须复制和修改类型。
推荐阅读
- angular - 来自模板的角度异步函数调用
- excel-formula - Excel公式比较2行并根据值进行分类
- windows - 如何绕过 Windows 智能屏幕?
- node.js - 如何在没有 heroku aws 或其他云计算的情况下部署 node.js 应用程序
- sql - 总结具有不同时间戳的日期并选择最小日期?
- docusignapi - RestAPI“创建”信封,其中信封属于与API用户不同的用户?
- python - 数据块中的熊猫分析
- sql - Oracle SQL 中的日期和交叉联接
- r - 如何在 gtsummary 包的特征表列中排序或更改行顺序?
- vue.js - 如果我在我的文本字段中输入,Vuetify 日期选择器不会保存正确的日期