回答:
既存の回答には選択肢がないため、ここに完全なリストがあります。
// 1. Explicitly declare the type
var arr: Criminal[] = [];
// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];
// 3. Using the Array constructor
var arr = new Array<Criminal>();
型を明示的に指定することは、変数宣言で型の推論が失敗した場合の一般的な解決策です。
型アサーション(キャストとも呼ばれますが、実際にはTypeScriptではキャストではありません)を使用する利点は、どの式でも機能するため、変数が宣言されていない場合でも使用できます。タイプアサーションには2つの構文がありますが、JSXと組み合わせて機能するのは後者のみです。
Arrayコンストラクターの使用は、この特定のユースケースでのみ役立つものですが、個人的には最も読みやすいと思います。ただし、実行時のパフォーマンスに若干の影響があります*。また、誰かがArrayコンストラクタを再定義するのに十分夢中だった場合、意味が変わる可能性があります。
それは個人的な好みの問題ですが、3番目のオプションが最も読みやすいと思います。ほとんどの場合、前述の欠点はごくわずかであり、読みやすさが最も重要な要素です。
*: 楽しい事実; 執筆時点では、Chromeでのパフォーマンスの違いは60%でしたが、Firefoxでは測定可能なパフォーマンスの違いはありませんでした。
私はこれが古い質問であることを知っていますが、特定の型の空の配列を返す必要があったため、最近、この方法では解決できない同様の問題に直面しました。
持っていた
return [];
タイプ[]
はどこでしたかCriminal[]
。
どちらreturn: Criminal[] [];
でもないreturn []: Criminal[];
私のために働いていません。
一見、私はとして(型付き変数を作成することによってそれを解決しますそれを返す前に正しく報告)が、(私はJavaScriptエンジンがどのように働くかを知らない)それは、オーバーヘッド作成することができ、それが読みにくくです。
完全にするために、この解決策も私の回答で報告します。
let temp: Criminal[] = [];
return temp;
結局、TypeScriptの型キャストを見つけました。これにより、問題をより簡潔で読みやすく(そしておそらく効率的に)解決できました。
return <Criminal[]>[];
これが将来の読者に役立つことを願っています!