仅当变量包含对实现该接口的类的引用时,如何获取接口的属性?

时间:2017-12-13 14:22:40

标签: typescript polymorphism

我需要获取具有特定接口的对象的属性,该接口包含对类对象的引用。当我打印该对象时,我获得该类的所有属性。

export interface IReporting
{
    Name: string | null;
    KeyValues: Array<KeyValue>;
}
export class AdminReport implements IReporting
{
    Id: number;
    UserIcon: string | null;
    Name: string | null;
    //Key-values
    KeyValues: Array<KeyValue>;
}
In component class:
let updated = <IReporting>(this.report);
console.log(updated);

应该期待看到: Name和KeyValues,但获取AdminReport的所有属性

1 个答案:

答案 0 :(得分:1)

使用类型断言不会改变有关底层运行时对象的任何内容。它只是通知编译器您希望report具有接口定义的形状。

您必须创建一个仅包含要发送到服务器的属性的新对象:

let updated = <IReporting>{
    KeyValues: report.KeyValues,
    Name: report.Name
}

您可以创建一个仅包含报表属性的类,并将信息从另一个对象复制到该属性。如果界面有很多属性,这是有意义的:

export class JustReporting implements IReporting
{
    // All proeprties must be initialized with null or another default so they appear when we call Object.getOwnPropertyNames
    Name: string | null = null;
    KeyValues: Array<KeyValue> = null;
    constructor(data: IReporting) {
        for (const prop of Object.getOwnPropertyNames(this)) {
            (<any>this)[prop] = (<any>data)[prop];
        }
    }
}