2017-11-10 14 views
1

によって禁止されていませんHTTPレスポンスオブジェクトのタイプIは、次の応答を返すAPIエンドポイントがあります:最初は角度4のHTTPClient - インタフェース

{ 
    "response": [ { "label": "mylabel", "name": "myname" } ], 
    "status": 200 
} 

を私は、この正確な構造に一致するインターフェイスを作成しますが、テストするために、私はこれにそれを変更:

export interface ListResponse { 
    response: number; 
    status: boolean; 
} 

this.http.get<ListResponse>('/api/list.php').subscribe(data => { 
    console.log(data.response) 
    console.log(data.status) 
}); 

私はレスポンスが明確にインターフェースプロパティの型と一致していませんが、私はいつものようにフィールドにアクセスすることができたので、typescriptですエラーを取得するために期待していました。タイプセーフティはどうですか?それは問題ではありませんか?

答えて

2

この場合はありません。コンパイル時のTypescriptは、サーバからの応答があなたが提供するインタフェースと一致するかどうかを知ることができません。だから例外をスローすることはできません。サーバーからの応答は、実際には文字列またはファイルである可能性があります。 これをチェックする唯一の方法は、実際にサーバーから応答を受け取る実行時です。しかし、現時点では、単純なJavaScriptのTypeScriptはありません。

編集:
やってのポイントは、結果を処理するときに型チェックを持っていること、である:インタフェース対応して配列として定義されている場合

for (var o of data.response) 

は動作します。数値として定義されている場合、typescriptはエラーをスローします。オブジェクトoおよびそのフィールドlabelおよびnameにアクセスすることもできます。

+0

この場合、プロパティタイプを指定する際のポイントは何ですか? –

+0

インターフェイスが一致応答を定義していると仮定すると、結果を処理するときにエラー応答またはインテリセンスのために使用できます。 – Makla