TS初めてのTypeScript

Day 2オブジェクト・配列・型に名前をつける

配列とオブジェクトの組み合わせ(APIのJSONを型で表す)

配列の型と、オブジェクトが入れ子になったデータの型を書き、実際のJSONに対応させる。

配列は「同じ型の値が並んだもの」

(配列)は、同じ種類の値を順番に並べたものです。型は「要素の型 + []」で書きます。string[] は文字列の配列、number[] は数値の配列です。

TYPESCRIPT
const names: string[] = ["田中", "佐藤", "鈴木"];
const scores: number[] = [80, 92, 75];
文字列の配列と数値の配列

なぜ配列にも型が要るのか

string[] と決めておけば、うっかり数値を混ぜたときにエラーになります。また names の中身は必ず文字列だと分かるので、names[0].length のような文字列向けの操作を安心して書けます。中身の型が保証されるのが配列の型注釈の価値です。

オブジェクトの配列でAPIのJSONを表す

実際のAPIは「ユーザーの一覧」のように、オブジェクトが並んだ配列を返すことがよくあります。これは User[] のように、interface の名前に [] をつけて表せます。

TYPESCRIPT
interface User {
  id: number;
  name: string;
}

const users: User[] = [
  { id: 1, name: "田中" },
  { id: 2, name: "佐藤" },
];
User[] は「User が並んだ配列」を表す

さらにAPIのJSONは、オブジェクトの中にオブジェクトや配列が入る「入れ子(ネスト)」になることがあります。次のようなJSONを考えます。

TYPESCRIPT
{
  "id": 1,
  "name": "田中",
  "profile": { "age": 30, "city": "東京" },
  "tags": ["admin", "active"]
}
入れ子になったJSONの例(profile はオブジェクト、tags は文字列配列)

このJSONの形は、interface を組み合わせて次のように表せます。profile は別の interface に切り出すと読みやすくなります。

TYPESCRIPT
interface Profile {
  age: number;
  city: string;
}

interface User {
  id: number;
  name: string;
  profile: Profile;
  tags: string[];
}
入れ子のJSONに対応する型。profile は Profile 型、tags は string[]

AIにはこう聞く

「このJSONに対応するTypeScriptの型を作って」とサンプルのJSONを貼って頼めば、入れ子まで含めた interface を作ってくれます。あなたは、切り出された Profile のような型が妥当か、配列とオブジェクトの区別が合っているかを確認します。型で守られていれば、後でAIが書いた処理コードのミスにも早く気づけます。

型なしでJSONを扱う

TYPESCRIPT
const user = getUser(); // 型が any(なんでもあり)
console.log(user.profile.age); // age のはずが age と書けてしまう…つづりミスに気づけない

型ありでJSONを扱う

TYPESCRIPT
const user: User = getUser();
console.log(user.profile.age); // profile が Profile 型なので age 以外は赤線
  • 配列の型は「要素の型 + []」(例: string[]、User[])
  • オブジェクトの配列で API のユーザー一覧などを表せる
  • 入れ子のJSONは interface を組み合わせて表す
  • profile のような部分は別の interface に切り出すと読みやすい

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

「User というオブジェクトが並んだ配列」を表す型はどれですか。

Q2

次のJSONに対応する型として最も適切なのはどれですか。 { "id": 1, "tags": ["a", "b"] }

Q3

APIが返す入れ子のJSONに対して型を用意しておくと、AIに実装を任せるうえでどんな安心につながりますか。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。