Day 2・オブジェクト・配列・型に名前をつける
配列とオブジェクトの組み合わせ(APIのJSONを型で表す)
配列の型と、オブジェクトが入れ子になったデータの型を書き、実際のJSONに対応させる。
配列は「同じ型の値が並んだもの」
(配列)は、同じ種類の値を順番に並べたものです。型は「要素の型 + []」で書きます。string[] は文字列の配列、number[] は数値の配列です。
const names: string[] = ["田中", "佐藤", "鈴木"];
const scores: number[] = [80, 92, 75];なぜ配列にも型が要るのか
string[] と決めておけば、うっかり数値を混ぜたときにエラーになります。また names の中身は必ず文字列だと分かるので、names[0].length のような文字列向けの操作を安心して書けます。中身の型が保証されるのが配列の型注釈の価値です。
オブジェクトの配列でAPIのJSONを表す
実際のAPIは「ユーザーの一覧」のように、オブジェクトが並んだ配列を返すことがよくあります。これは User[] のように、interface の名前に [] をつけて表せます。
interface User {
id: number;
name: string;
}
const users: User[] = [
{ id: 1, name: "田中" },
{ id: 2, name: "佐藤" },
];さらにAPIのJSONは、オブジェクトの中にオブジェクトや配列が入る「入れ子(ネスト)」になることがあります。次のようなJSONを考えます。
{
"id": 1,
"name": "田中",
"profile": { "age": 30, "city": "東京" },
"tags": ["admin", "active"]
}このJSONの形は、interface を組み合わせて次のように表せます。profile は別の interface に切り出すと読みやすくなります。
interface Profile {
age: number;
city: string;
}
interface User {
id: number;
name: string;
profile: Profile;
tags: string[];
}AIにはこう聞く
「このJSONに対応するTypeScriptの型を作って」とサンプルのJSONを貼って頼めば、入れ子まで含めた interface を作ってくれます。あなたは、切り出された Profile のような型が妥当か、配列とオブジェクトの区別が合っているかを確認します。型で守られていれば、後でAIが書いた処理コードのミスにも早く気づけます。
型なしでJSONを扱う
const user = getUser(); // 型が any(なんでもあり)
console.log(user.profile.age); // age のはずが age と書けてしまう…つづりミスに気づけない型ありでJSONを扱う
const user: User = getUser();
console.log(user.profile.age); // profile が Profile 型なので age 以外は赤線- 配列の型は「要素の型 + []」(例: string[]、User[])
- オブジェクトの配列で API のユーザー一覧などを表せる
- 入れ子のJSONは interface を組み合わせて表す
- profile のような部分は別の interface に切り出すと読みやすい
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
「User というオブジェクトが並んだ配列」を表す型はどれですか。
次のJSONに対応する型として最も適切なのはどれですか。 { "id": 1, "tags": ["a", "b"] }
APIが返す入れ子のJSONに対して型を用意しておくと、AIに実装を任せるうえでどんな安心につながりますか。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。