angular – 过滤器对象属性匹配接口

前端之家收集整理的这篇文章主要介绍了angular – 过滤器对象属性匹配接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些实现某些接口的对象,但它们也有额外的属性.
当我来序列化它们(保存在文件中)时,我想删除所有额外的属性,并且只保留与接口匹配的属性.

有没有办法“清理”关于给定接口的对象.
我正在努力

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)

猜你在找的Angularjs相关文章