string[] と Array<string> は「意味は同じ」
最初に結論から言うと、string[] と Array<string> は意味はまったく同じです。
どちらも「string 型の要素だけを持つ配列」という型を表しています。
let names1: string[] = ["Taro", "Hanako"];
let names2: Array<string> = ["Taro", "Hanako"];
TypeScriptこの2つは、型としては完全に等価です。
じゃあ、なぜ2種類の書き方があるのか——ここを整理していきます。
string[] 記法の特徴(シンプルで読みやすい)
一番よく使われる、素直な書き方
string[] は、「string の配列」という意味をそのまま書いた形です。
let messages: string[] = ["hello", "bye"];
let scores: number[] = [80, 90, 100];
let flags: boolean[] = [true, false, true];
TypeScript左から右に読んでいくと、
「string があって、その後ろに [] が付いている → string の配列だな」
と直感的に理解しやすいのが強みです。
実務でも、単純な配列型はほとんどこの書き方で書かれます。User[], Post[], number[] のように、「T[]」の形がデフォルトだと思っていてOKです。
ネストした配列でも使える
多次元配列も、[] を重ねるだけで表現できます。
let matrix: number[][] = [
[1, 2],
[3, 4]
];
TypeScript「number の配列の配列」という意味で、これもかなり読みやすいです。
Array<string> 記法の特徴(ジェネリクスっぽい書き方)
ジェネリック型としての書き方
Array<string> は、「Array という型に string を渡している」という形になっています。
let messages: Array<string> = ["hello", "bye"];
let scores: Array<number> = [80, 90, 100];
TypeScriptこれは、Array<T> という「ジェネリック型」に対して、T = string や T = number を指定しているイメージです。
TypeScriptでは、Promise<string>, Map<string, number> のように、型名<型引数> という形のジェネリック型がたくさん出てきます。
その流れで、「Array もジェネリック型として書けるよ」というのが Array<string> 記法です。
ネストしたときの見え方
多次元配列も、もちろん書けます。
let matrix: Array<Array<number>> = [
[1, 2],
[3, 4]
];
TypeScriptただ、number[][] と比べると少しカッコが多くて読みにくく感じる人もいます。
ここは完全に好みですが、配列が深くなるほど T[] 記法の方がスッキリ見えることが多いです。
どっちを使うべきか(実務での感覚)
基本は string[] を使う
まず、配列型を普通に書くときは、string[] の方を使うのが一般的です。
理由はシンプルで、
短くて読みやすい
JavaScriptの感覚からの延長で理解しやすい
多次元配列も T[][] のように直感的に書ける
からです。
let tags: string[] = ["ts", "js"];
let users: User[] = [{ id: 1 }, { id: 2 }];
TypeScriptこのあたりは、チームのコーディング規約でも「配列は T[] 記法で統一」と決められていることが多いです。
Array<T> を選ぶことがある場面
一方で、Array<T> をあえて使う場面もあります。
たとえば、ジェネリック型の中で「配列の型を型引数として受け取りたい」ときなどです。
type Wrapper<T> = {
items: Array<T>;
};
TypeScriptここで items: T[] と書いても意味は同じですが、
「ジェネリック型の中で、さらにジェネリックな Array を使っている」という構造が、Array<T> の方が視覚的に分かりやすいと感じる人もいます。
ただ、これはかなり好みの領域なので、
「まずは T[] を使う。必要になったら Array<T> も読めるようにしておく」
くらいのスタンスで十分です。
初心者がまず押さえておくべきポイント
「意味は同じ。読み書きしやすい方を選べばいい」
一番大事なのは、string[] と Array<string> は型としては完全に同じだということです。
なので、
他人のコードを読むときに Array<string> が出てきても、「あ、string[] と同じだな」と分かる
自分で書くときは、まずは string[] を使っておけば困らない
この2つができればOKです。
配列型を書くときに意識したいこと
配列型を書くときに、本当に意識すべきなのは「どっちの記法か」ではなく、
この配列には何の型の要素が入るのか
その要素の型をちゃんと絞れているか(any[] になっていないか)
という部分です。
string[] でも Array<string> でも、
「この配列は string だけを入れる場所だ」と型で宣言できていることが大事。
そこさえブレていなければ、記法の違いはただの“表現の揺れ”に過ぎません。
まずは string[] を自分の手に馴染ませて、Array<string> は「読めればいいや」くらいで構えておくと、肩の力を抜いて進められます。
