2017-11-12 10 views
0

はのは、私は次のインタフェースを持っているとしましょう:配列を持つTypescriptインターフェイスを初期化するには?

export interface MyObject { 
 
    id: string; 
 
    createdAt: Date; 
 
    updatedAt: Date; 
 
} 
 

 
export interface MyFile extends MyObject { 
 
    data: any; 
 
    name: string; 
 
} 
 

 
export interface MyUser extends MyObject { 
 
    name: string; 
 
    photos: Array <MyFile> ; 
 
}

私は、たとえば、角度のアプリでMyUserインスタンスを初期化するにはどうすればよいですか?私が抱えている問題は、オブジェクトが実際に巨大であることです。すべてのプロパティのデフォルト値を宣言する必要がないと思っています。特に、モデル内に配列の配列があります。

+0

インターフェイスには初期化子がありません。代わりにクラスを使用してください。 – pixelbits

答えて

2

インターフェイスに準拠するものはすべて、定義によって実装します。これは、TypeScriptに構造型システムがあるためです。

次に、インターフェイスの実装を初期化するいくつかの例を示します。

const user = { 
    id: "1", 
    createdAt: new Date(), 
    updatedAt: new Date(), 
    name: "Kurt", 
    photos: [{ 
    id: "1", 
    name: "avatar.png", 
    createdAt: new Date(), 
    updatedAt: new Date(), 
    data: "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" 
    }] 
}; 

上記のオブジェクトリテラルは、MyUserインターフェイスを実装しています。

変数宣言にインターフェイスタイプを指定することもできます。これは、オブジェクトリテラルを記述するときにインターフェイスメンバーにインテリセンスを提供するためです。

const user: MyUser = { 
    id: "1", 
    createdAt: new Date(), 
    updatedAt: new Date(), 
    name: "Kurt", 
    photos: [{ 
    id: "1", 
    name: "avatar.png", 
    createdAt: new Date(), 
    updatedAt: new Date(), 
    data: "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=" 
    }] 
};