TypescriptのArray <Type> VS Type []


162

私の知る限り、配列の場合、プロパティのタイプは2つの方法で定義できます。

property_name: type

タイプはどちらでもかまいません

Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)

そして

string[], MyType[], etc. (e.g. let prop1: string[])

2つのケースの違いは何ですか?または私は何かを誤解していますか(おそらくキャストで使用された<>について何か?)

質問は重複としてマークされているので編集します。私はany []について他の質問があることを認識していますが、投稿する前にそれを確認しました。 >私は尋ねました



1
それらは実質的に同じ構造であり、実行時には事実上同じオブジェクトです。また、Reflect-metadataは、Arrayオブジェクトをコンストラクターとして持つものとして扱います。上記のリンクされた回答を参照してください。
John Weisz

3
@NitzanTomerその質問は時代遅れです- Array<T>その当時存在しませんでした。
ネイサンShively-Sanders

この質問は、「間の異なる何に減少させることができるので、NathanShively-サンダース@答えはジェネリックの有無にかかわらず同じであるlet x: Array;let x: any[];
Nitzan Tomer

回答:


168

意味上の違いはありません

全く違いはありません。Type[]の配列の省略構文ですTypeArray<Type>一般的な構文です。それらは完全に同等です。

ハンドブックはここに例を提供します。これは次のように書くことと同じです:

function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
}

または:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
    console.log(arg.length);
    return arg;
}

そして、ここにいくつかのリリースノートからの引用があります:

具体的にnumber[]は、の短縮形とArray<number>同様に、Date[]はの短縮形ですArray<Date>

ただし、省略構文が必要な場合があります。

TypeScript 3.4以降、新しいタイプ修飾子には違いがありreadonlyます。確かに:

readonly型修飾子は配列型とタプル型で構文のために使用することができます

let err2: readonly Array<boolean>; // error!    
let okay: readonly boolean[]; // works fine

ただし、次の宣言はと同等readonly boolean[]です。

let okay2: ReadonlyArray<boolean>;

1
@dragonmnl、それはジェネリック型です。ハンドブックの「ジェネリックのHello World」のセクションを読んでください。
Paleo

4
公式の勧告はありません。個人的には、type[]読みやすいように省略形()のみを使用しています。
Paleo

2
彼らはそうではありません完全にもう同じ:typescriptlang.org/docs/handbook/release-notes/...
DShook

1
私がそれを正しければ、それがreadonly実際には必要ない場合に備えて。:あなたが長い表記を好む場合は、このようにそれを書くことができますlet err2: ReadonlyArray<boolean>;
n4nn31355

1
@ n4nn31355そう思います。この通知を追加するために編集しました。
パレオ

-10
foo: Array

それはそれがそのanyメンバーの暗黙の型を持つプレーン配列であることを意味します

foo: string[]

つまり、それが文字列の配列であることを意味します。つまり、その配列に文字列以外のものをプッシュしようとすると、TypeScriptはメンタルになります。


10
問題はArray <string> vs string []であり、Array vs string []ではありませんでした。
JuanguiJordán2017年

奇妙なことに、パラメーターが次のように定義されているメソッドに数値の配列を渡しても、TypeScriptは気にしないようですfoo: string[]
jlewkovich

3
数値の配列fn([1,2,3])を渡すと、問題ありません。変数を渡し、タイプが明示的でない場合は、a = [];とします。a = [1,2,3]; fn(a)の場合、aはタイプany []なので問題ありません
Quentin 2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.