2017-12-13 5 views
0

クラスオブジェクトへの参照を含む特定のインターフェイスのオブジェクトのプロパティを取得する必要があります。そのオブジェクトを印刷すると、そのクラスのすべてのプロパティが取得されます。 名とKeyValuesはを、代わりに基本的なランタイムオブジェクトについては何も変更されません型アサーションを使用してAdminReport変数がそのインタフェースを実装するクラスへの参照を含む場合にのみ、インタフェースのプロパティを取得する方法は?

+0

あなたが –

+0

をやろうとしている。しかし、私は、サーバーにこのオブジェクトを送信し、私はそれが自動的にすべてのプロパティを送りたいものをilustrateするためにいくつかのサンプルコードを追加します。インターフェイスは、プロパティの多くを持っている場合、これは理にかなっていますそのオブジェクト(インターフェイス)私は手動で各プロパティを選択せず​​に。 – Dragma

答えて

1

のすべてのプロパティを取得:

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); 

が見に期待するべきです。 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]; 
     } 
    } 
} 
+0

よろしくお願いいたします。私はそれを行います。 – Dragma

+0

これを達成するための自動化された方法が追加されました。おそらくそれはあなたにとって役に立ちます:) –

関連する問題