2016-09-22 10 views
2

オブジェクトを型配列にキャストするコードがいくつかありました(コンパイルエラーなしでオブジェクトの配列関数を使用できるようになりました)。TypeScript 2の配列にキャストする方法は?

var n = (result.data['value'] as []).map((a)=>{ 
     //.. 
    }); 

しかし、TS2にアップグレードするには、私が取得:

エラーTS1122:タプル型要素リストが空にすることはできません。

実際には、コンマまたは値を忘れたと主張する構文エラーです。だから、このキャストを正しく修正するにはどうすればいいですか?

私はas [IMyType]を試してみましたが、機能しましたが、ここではarray.prototypeの機能しか必要ないのでタイプを指定したくないのです...また、実際にどうやっているのかは分かりません。

+0

[「値」] '' result.dataの種類は何ですか? –

+0

これは単なる単純な配列です。 – FlavorScape

+0

私はそれを私の最終的な型にキャストすることができましたが、私はここでそれが必要だとは思わないので、配列メソッドを使いたいだけです。 – FlavorScape

答えて

3

何らかの理由により、コンパイラはそれがresult.data['value']is a tupleであり、配列ではないと考えています。

あなたはこのようにそれをキャストすることができます:

それは配列のコンパイラ、または教えてください
result.data['value'] as any[] 

:あなたの配列は、その後のタイプIMyTypeの項目のみを持っている場合

result.data['value'] as Array<any> 

を単純に:

result.data['value'] as IMyType[] 

はしかし、あなたの配列は、異なる種類のアイテムが含まれている場合、それはany[]またはタプルのどちらかだ、例えば:いずれの場合で

result.data['value'] as [IMyType, string, string] 

、コンパイル済みのJSには、配列になりますが、タプルは、あなたが定義してみましょう特定の型を持つ固定長配列。

+0

ああ、これはTS仕様を読んでいないときに起こります。 – FlavorScape

6

あなたは配列にキャストしていません。

[string]は、単一要素のタプルです。stringです。

[string, string]は、2つの要素、すなわち、stringとのタプルです。

[]は、要素がゼロのタプルです。

文字列の配列の構文を使用すると、おそらくresult.data['value'] as any[]で欲しいstring[]

です。

0

はまた、上記の以前のキャスト構文オプションに、あなたも行うことができ、次の

var n = (<SampleType[]>result.data['value']).map((a) => { 
    //.. 
}); 
関連する問題