2016-04-12 19 views
2

でモデル形式を強制私は次のモデルがあります:私はmymodelというの属性を持つJSONデータを要求するサービスで角度 - 角度を使用しながら返されたJSON配列

export interface MyModel { 
    id: number; 
    content: string; 
} 

を。このような何か:

function getMyModel() { 
    return this.http 
     .post('http://www.somewhere.com/getOneModel') 
     .map(result => <MyModel> result.json()) 
     .catch(this.handleError); 
} 

ザ・はJSONはこのようなもので返さ:あなたは、私は結果をmap()ながら、私はJSONはこれを行うことによりに、mymodelに準拠していることを確認していることがわかりますgetMyModel()

{ id: 1, content: "Stuff" } 

<MyModel> result.json()

この時点ですべてがうまくいきます。

ここで、モデルの配列を返し、すべてがMyModelに準拠していることを確認します。

{[ 
    { id: 1, content: "Stuff" }, 
    { id: 2, content: "More stuff" } 
]} 

この場合map()には結果が配列であるので、JSONの配列要素がmymodelというに同意を確認することはできません。

function getLotsOfModels() { 
    return this.http 
     .post('http://www.somewhere.com/getLotsOfModels') 
     .map(result => result.json()) 
     .catch(this.handleError); 
} 

ザ・

は、JSONは、このようなものである返されました。結果が正しいことをどのように確認できますか?

答えて

4

MyModel[]にキャストすることができます。

function getLotsOfModels() { 
    return this.http 
    .post('http://www.somewhere.com/getLotsOfModels') 
    .map(result => <MyModel[]> result.json()) 
    .catch(this.handleError); 
} 

Typescriptは構造チェックを行わないため、このキャストは実行時にのみ失敗する可能性があります。 MyModelに方法がある場合。 Jsonはそれらを持っていないので、メソッドを呼び起こしたいときに問題にぶつかります。例えば

、あなたのモデルを取得した後:

myModel.myMethod(); 

これは、実行時にエラーがスローされます、基本的なJSON以来、機能が定義されていないと、コンパイラはそれをキャッチすることはできませんキャストのために。

+1

パーフェクト。ありがとうございました。 – ebakunin

0

コレクションとして示すには、Array/Listを使用する必要があります。

.map(result => Array<MyModel> result.json()) 
関連する問題