-
ID:l00cjD さんの質問

TypeScriptです。any[]とArray<T>の違いを教えてください
-
調べても記号が多いためみつかりませんでした。。

みんなの回答 1 件

ID:oHgxVk さんの回答

大きく2つの違いがあります。

  1. 前者はそのまま使えるが、後者はそのまま使えない
  2. 前者は配列の要素の型がバラバラでもOKだが、後者はNG

## 1. について

例えば以下のコードはコンパイルエラーになります。

```
var a : any[]; //ok
var b : Array<T>; //Tという型がないのでerror!
```

`Array<T>` という表記は定義時の時のものなので、実際に変数の型として使う事はできません。`var b : Array<number>;` のように具体的な型を`T`の箇所に記述して使う必要があります。

## 2. について

```
var a : any[];
a[0] = 1; //ok
a[1] = "str"; //ok
a[2] = {hoge:"fuga"}; //ok

var b : Array<number>;
b[0] = 1; //ok
b[1] = "str"; //error!
b[2] = {hoge:"fuga"}; //error!
```

TypeScriptのany型は何でも入れられるので、any型の配列(`any[]`)の各要素はどんな型でも入れられます。一方ジェネリック型のArray(`Array<T>`)の場合、要素はTの箇所で指定した型のみに制限されます。

上記の例ではnumber型を指定しているのでbの各要素はnumberでなければコンパイルエラーになります。

## 補足

`any[]` は `Array<any>` と同じ意味です。

`Array<T>`のような表記は「ジェネリック型」、こういう事が出来る言語の機能は「ジェネリクス」で調べると見つかります。

Playground - Welcome to TypeScript

http://bit.ly/1Mmwc70
最終更新日:2015-06-10 (3,270 views)

関連するトピックス

ページ上部に戻る