2017-06-12 12 views
0

私のコードでは、jsonのデータをコンストラクタでインスタンス化する必要があることがよくあります。このキーワードでTypescriptオブジェクトスプレッド演算子を使用する

function append(dst, src) { 
    for (let key in src) { 
     if (src.hasOwnProperty(key) { 
      dst[key] = src[key]; 
     } 
    } 
}; 


export class DataClass { 
    id: number; 
    title: string; 
    content: string; 
    img: null | string; 
    author: string; 
    // no methods, just raw data from API 
} 


export class AdoptedClass1 extends DataClass { 
    // has same fields as DataClass 
    showcase: string; 

    constructor (data: DataClass) { 
     append(data, this); 

     // do some stuff 
    } 
} 


// similar code for AdoptedClass2 

私はあなたの必要性のためにオブジェクトの広がりオペレータ

答えて

2

でコンストラクタでアペンド関数呼び出しを置き換えることができれば、私はあなたのカスタム上Object.assign(this, data)を使用することを好むだろうと思いましては、append機能を作りました。それにもかかわらず、それの限界を理解するためにdocumentationを見てください。

主な質問に戻る:あなたが望むことをするために普及した演算子を使用することはできません。多くの人がその機能に興味を持っていますが、hereのように保留になっています。

あなたは私たちがあなたのコードを少しリファクタリングすることができます尋ねるものの近くに取得するには:

export class DataClass { 
    id: number 
    title: string 
    content: string 
    img: null | string 
    author: string 
    constructor(data: DataClass) { 
     Object.assign(this, data) 
    } 
} 

export class AdoptedClass1 extends DataClass { 
    showcase: string 

    constructor (data: DataClass) { 
     super(data) 

     // do some stuff 
    } 
} 

単にあなたが子供にsuper(data)の使用を許可され、私見コードがされるデータのクラスにconstructorを追加することによりたくさんのクリーナー。

1

あなたはこのライン置き換えることによって、対象の広がり演算子を使用することができます。この行で

append(data,this) 

data = {...data, ...this}; 
関連する問題