angular – 过滤器对象属性匹配接口
发布时间:2020-12-17 18:02:42 所属栏目:安全 来源:网络整理
导读:我有一些实现某些接口的对象,但它们也有额外的属性. 当我来序列化它们(保存在文件中)时,我想删除所有额外的属性,并且只保留与接口匹配的属性. 有没有办法“清理”关于给定接口的对象. 我正在努力 Object.getOwnPropertyNames(myObject) 要获取对象属性的完整
我有一些实现某些接口的对象,但它们也有额外的属性.
当我来序列化它们(保存在文件中)时,我想删除所有额外的属性,并且只保留与接口匹配的属性. 有没有办法“清理”关于给定接口的对象. Object.getOwnPropertyNames(myObject) 要获取对象属性的完整列表,并与接口属性的完整列表进行比较,但我找不到获取接口属性列表的方法 编辑:我在这里找到了一条路:How can I create an object based on an interface file definition in TypeScript? 同 var object = <IMyInterface>{}; 但是我看到当我使用Object.getOwnPropertyNames(myObject)时,这只适用于已定义的属性,如果未定义属性,则它不在结果中.有没有一种方法可以获得所有可用的属性,而不仅仅是已定义的属性? 解决方法
看看这段代码:
interface MyInterface1 { field1: string; field2: string; } interface MyInterface2 { field3: string; field4: string; } let o1 = { field1: "field1",field2: "field2",fieldN: "fieldN" } as MyInterface1; let o2 = { field3: "field3",field4: "field4",fieldN: "fieldN" } as MyInterface2; 它汇编成: var o1 = { field1: "field1",fieldN: "fieldN" }; var o2 = { field3: "field3",fieldN: "fieldN" }; (code in playground) 因此,您可以看到在编译的(js)代码中,接口不存在,因此您无法知道(在运行时)您需要保留的属性. 你能做的是: let myInterface1Keys = ["field1","field2"]; interface MyInterface1 { field1: string; field2: string; } let o1 = { field1: "field1",fieldN: "fieldN" } as MyInterface1; let persistableO1 = {} as MyInterface1; Object.keys(o1).forEach(key => { if (myInterface1Keys.indexOf(key) >= 0) { persistableO1[key] = o1[key]; } }); (code in playground) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |