Lem*_*kin 5 typescript angular
我有一些实现某些接口的对象,但它们也有额外的属性.当我来序列化它们(保存在文件中)时,我想删除所有额外的属性,并且只保留与接口匹配的属性.
有没有办法"清理"关于给定接口的对象.我正在努力
Object.getOwnPropertyNames(myObject)
Run Code Online (Sandbox Code Playgroud)
要获取对象属性的完整列表,并与接口属性的完整列表进行比较,但我找不到获取接口属性列表的方法
编辑:我在这里找到了一种方法:如何根据TypeScript中的接口文件定义创建对象?
同
var object = <IMyInterface>{};
Run Code Online (Sandbox Code Playgroud)
但是我看到当我使用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;
Run Code Online (Sandbox Code Playgroud)
它编译成:
var o1 = {
field1: "field1",
field2: "field2",
fieldN: "fieldN"
};
var o2 = {
field3: "field3",
field4: "field4",
fieldN: "fieldN"
};
Run Code Online (Sandbox Code Playgroud)
(操场上的代码)
所以你可以看到在编译的(js)代码中接口不存在,所以你无法知道(在运行时)你需要保留哪些属性。
你能做的是:
let myInterface1Keys = ["field1", "field2"];
interface MyInterface1 {
field1: string;
field2: string;
}
let o1 = {
field1: "field1",
field2: "field2",
fieldN: "fieldN"
} as MyInterface1;
let persistableO1 = {} as MyInterface1;
Object.keys(o1).forEach(key => {
if (myInterface1Keys.indexOf(key) >= 0) {
persistableO1[key] = o1[key];
}
});
Run Code Online (Sandbox Code Playgroud)
(操场上的代码)
| 归档时间: |
|
| 查看次数: |
2772 次 |
| 最近记录: |