TypeScript:空の型付きコンテナー配列の作成


184

TypeScriptで「Three of a Crime」というシンプルなロジックゲームを作成しています。

TypeScriptで事前に割り当てられた型付き配列を試そうとすると、次のようなことを試みました。

var arr = Criminal[];

「式の用語の形式を確認してください」というエラーが発生しました。

これもやってみました

var arr : Criminal = [];

これは、「[]を「犯罪者」に変換できません。

これを行う「TypeScript」方法は何ですか?

回答:


168

既存の回答には選択肢がないため、ここに完全なリストがあります。

// 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>();
  1. 型を明示的に指定することは、変数宣言で型の推論が失敗した場合の一般的な解決策です。

  2. 型アサーション(キャストとも呼ばれますが、実際にはTypeScriptではキャストではありません)を使用する利点は、どの式でも機能するため、変数が宣言されていない場合でも使用できます。タイプアサーションには2つの構文がありますが、JSXと組み合わせて機能するのは後者のみです。

  3. Arrayコンストラクターの使用は、この特定のユースケースでのみ役立つものですが、個人的には最も読みやすいと思います。ただし、実行時のパフォーマンスに若干の影響があります*。また、誰かがArrayコンストラクタを再定義するのに十分夢中だった場合、意味が変わる可能性があります

それは個人的な好みの問題ですが、3番目のオプションが最も読みやすいと思います。ほとんどの場合、前述の欠点はごくわずかであり、読みやすさが最も重要な要素です。

*: 楽しい事実; 執筆時点では、Chromeでのパフォーマンスの違いは60%でしたが、Firefoxでは測定可能なパフォーマンスの違いはありませんでした。


60%?? :Oワイルド
マックスコプラン

239

TypeScriptで型付き配列を正しく事前に割り当てるという問題は、配列リテラル構文のためにややあいまいだったため、最初に思ったほど直感的ではありませんでした。

正しい方法は

var arr : Criminal[] = [];

これにより、変数「arr」に格納された、正しく型付けされた空の配列が得られます

これが他の人に役立つことを願っています!


20

私はこれが古い質問であることを知っていますが、特定の型の空の配列を返す必要があったため、最近、この方法では解決できない同様の問題に直面しました。

持っていた

return [];

タイプ[]はどこでしたかCriminal[]

どちらreturn: Criminal[] [];でもないreturn []: Criminal[];私のために働いていません。

一見、私はとして(型付き変数を作成することによってそれを解決しますそれを返す前に正しく報告)が、(私はJavaScriptエンジンがどのように働くかを知らない)それは、オーバーヘッド作成することができ、それが読みにくくです。

完全にするために、この解決策も私の回答で報告します。

let temp: Criminal[] = [];
return temp;

結局、TypeScriptの型キャストを見つけました。これにより、問題をより簡潔で読みやすく(そしておそらく効率的に)解決できました。

return <Criminal[]>[];

これが将来の読者に役立つことを願っています!


1

公にアクセスするには、次のように使用します。

public arr: Criminal[] = [];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.