組み込みのジェネリクス

string[] は Array の略記

ここまで書いてきた配列の型には、もう一つの書き方があります。

const titles: string[] = ["プロフィールサイト", "自己紹介カード"]; const titles2: Array<string> = ["プロフィールサイト", "自己紹介カード"];

この 2 行はまったく同じ意味です。Array は、要素の型を型引数で受け取る組み込みのジェネリック型です。つまり T[] のほうが略記で、正体は Array<T> です。

ふだんは短い string[] を使い、要素の型が長くなるときや、他のジェネリック型と並べて読ませたいときに Array<...> を使います。

Promise は「あとで中身が入る箱」

もう一つ、必ず出てくるのが Promise です。こちらも型引数を 1 つ取ります。

const p: Promise<number> = Promise.resolve(3);

Promise<number> は、待てば number が取り出せる、という意味です。箱そのものは number ではありません。

await すると中身が出てきます。

const n = await p; // n は number

fetch の戻り値を読み解く

サーバーから作品一覧を取ってくる関数です。React 実践でそのまま出てくる形です。

async function fetchWorks(): Promise<Work[]> { const res = await fetch("/api/works"); return res.json(); }

async を付けた関数の戻り値は必ず Promise<...> になります。中で返しているのは Work[] でも、外から見た型は Promise<Work[]> です。呼ぶ側は await して初めて Work[] を受け取れます。

const works = await fetchWorks(); // works は Work[]

型引数の中身が答えの形そのものなので、Promise<Work[]> と書いてあれば、待った先に何が来るのかが読むだけで分かります。

手を動かす

演習では、作品の配列から公開中のタイトルだけを取り出す関数を書きます。型は Array<...> の書き方で書いてください。Promise は次のコースで実際に使います。ここでは読めることを目標にします。

要件

  1. 引数と戻り値の型を Array<...> の書き方で書く
  2. 組み立て用の配列にも型を書く
  3. published が true の作品のタイトルだけを、元の並び順のまま返す
  4. any は使わない

入出力例

publishedTitles([{"published":true,"title":"プロフィールサイト"},{"published":false,"title":"自己紹介カード"},{"published":true,"title":"スキル一覧の表"}])["プロフィールサイト","スキル一覧の表"] publishedTitles([{"published":true,"title":"プロフィールサイト"},{"published":true,"title":"自己紹介カード"}])["プロフィールサイト","自己紹介カード"] publishedTitles([{"published":false,"title":"下書きメモ"}])[] publishedTitles([])[] publishedTitles([{"published":false,"title":"自己紹介カード"},{"published":true,"title":"スキル一覧の表"}])["スキル一覧の表"]

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.ts
main.ts
学習モード

メモ

組み込みのジェネリクス

⌘S で保存