我需要获取具有特定接口的对象的属性,该接口包含对类对象的引用。当我打印该对象时,我获得该类的所有属性。
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的所有属性
答案 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];
}
}
}