如何在TypeScript中实现通用函数以移除对象的冗余属性
如何在TypeScript中实现通用函数以移除对象的冗余属性
这其实是一个和之前类似的问题,但我想换个角度重新梳理,重点不在于类型转换本身,而是实际移除对象的冗余属性。
我现在遇到的情况是:手里有一个any类型的对象,需要只保留我定义的接口中存在的属性,把接口里没有的多余属性都剔除掉。
举个例子,我先定义了这两个接口:
interface Address { street: string; } interface Person { name: string; address: Address; }
然后我从外部拿到了这样一个对象:
const obj: any = { id: 123, name: 'Name Surname', address: { number: 456, street: 'Long street' }};
我需要把这个obj转换成符合Person接口的personObj,也就是要去掉id以及address.number这些不在接口定义里的属性。
我已经知道,简单的类型断言根本不管用:
const personObj = obj as Person; // 完全不会移除多余属性
这种操作只是给对象加上了TypeScript的类型标注,实际对象的冗余属性依然存在,完全达不到我想要的效果。
之前我都是手动写转换函数来处理:
function convert(obj: any): Person { return { name: obj.name, address: { street: obj.address.street } }; }
但随着应用的增长,对接的API越来越多,需要处理的接口也越来越多,每次都手动写这样的转换函数太繁琐了,所以我想能不能写一个通用函数来解决这个问题。
动机:我的应用会调用API并把响应数据缓存起来,API返回的对象包含很多不必要的属性,为了最小化缓存的数据量,我需要只保留接口中定义的必要属性,剔除掉其他冗余内容。
备注:内容来源于stack exchange,提问作者Leo von Barbarosa
相关产品推荐
相关产品推荐

