node.js - 删除 nodejs typescript 接口中不存在的属性
问题描述
我正在使用带有 typescript 的 node.js,我有一个问题
在转换对象时,可以删除接口中不存在的属性。
interface IFooReal {
prop1: string;
}
const objTMP = {prop1: 'foo001', prop2: 'foo002', prop3: 'foo003'};
cont barr = objTMP as IFooReal; //or do someting to remove properties not presente in interface
console.log(barr);
当执行console.log(barr);
结果是{prop1: 'foo001'}
解决方案
使用类型断言likeobjTMP as IFooReal
不会改变任何关于的内容objTMP
,它只会告诉 TypeScript“请把它当作一个IFooReal
”。
TypeScript 的目的只是注释你的代码,让它检查它的类型安全。它不会修改您的代码,也不会添加自己的任何执行(除了有限的例外,如enum
s)。当 TypeScript 被编译成 JavaScript 时,这个过程主要是删除那些注解。
如果要从对象中删除除一部分属性之外的所有属性,则需要遍历其属性并删除任何与您要保留的属性不匹配的属性。像这样的东西,例如:
interface IFooReal {
prop1: string;
}
const objTMP = {
prop1: 'foo001',
prop2: 'foo002',
prop3: 'foo003'
};
// You may want to get this by calling Object.keys() on another object?
const propertiesToKeep = ['prop1'];
for (let prop in objTMP) {
if (propertiesToKeep.includes(prop) === false) {
delete (objTMP as {[key:string]: any})[prop];
}
}
console.log(objTMP);
我不得不在objTMP as {[key: string]: any})
这里使用类型断言,因为否则 TypeScript 会抱怨你试图objTMP
使用带有 type 的变量来访问属性string
,而 TypeScript 已经隐式键入它,{ prop1: string, prop2: string, prop3: string }
所以只有 type 的值'prop1'|'prop2'|'prop3'
可以用来访问它的属性.
该类型断言基本上只是告诉 TypeScript“让我尝试使用任何字符串作为键来访问此对象的属性,而不必担心该属性具有什么类型”。
推荐阅读
- amazon-web-services - AWS首次登录找不到Account ID
- python - 添加带有条件着色的水平线
- hyperledger-fabric - Chaincode 可以被 cli 容器列出,但在 peer 容器中不存在
- javascript - reactjs如何从文件中获取字节数组
- php - 如何使用 Php Laravel 从网站中删除背景图片?
- facebook-instant-games - Android 设备上的 Facebook Instant Game IAP
- python - Django 为不同的 url 读取相同的 CBV
- outlook - conversationId - 如何检测多个用户之间的对话
- javascript - 按钮更改参数的真/假
- java - 如何修复 RocketmqClient 中的“主题名称服务器中没有主题路由信息”异常