web-dev-qa-db-ja.com

TypeScript 2で配列にキャストする方法は?

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

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

しかし、ts2にアップグレードすると、次のようになります。

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

これは実際には構文エラーであり、コンマまたは値を忘れたと主張しています。それで、このキャストを修正して正しく動作させるにはどうすればよいですか?

私は試した as [IMyType]とそれは機能しましたが、私はarray.prototype関数がここに...また、私はあなたが実際にそれを行う方法だとは思わない。

8
FlavorScape

何らかの理由で、コンパイラはresult.data['value']タプル であり、配列ではありません。

次のようにキャストできます。

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

配列であることをコンパイラに伝える必要があります、または:

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

配列にIMyType型のアイテムのみがある場合は、次のようにします。

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

ただし、配列にさまざまなタイプのアイテムが含まれている場合は、any[]またはタプル、たとえば:

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

いずれにせよ、コンパイルされたjsでは配列になりますが、タプルを使用すると、特定のタイプの固定長配列を定義できます。

16
Nitzan Tomer

配列にキャストしていません。

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

[string, string]は、stringstringの2つの要素を持つタプルです。

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

文字列の配列の構文はstring[]

おそらく必要なのはresult.data['value'] as any[]

7
cdbajorin

上記の前述のキャスト構文オプションの代わりに、次のこともできます。

var n = (<SampleType[]>result.data['value']).map((a) => {
    //..
});
1
Gorka Hernandez