1. 3 件中 2 件が公開中
  2. すべて公開中
  3. すべて非公開
  4. 作品がまだ 1 件も無い
  5. 公開中が 1 件だけ
コース一覧
TypeScript型設計:オブジェクト・状態・ジェネリクス
組み込みのジェネリクス

TypeScript型設計:オブジェクト・状態・ジェネリクス

interface、optional property、readonly、union・リテラル型、型ガード、ジェネリクスを扱う全23レッスンの型設計コースです。Profile・Work・ApplicationStateを題材に、APIや画面で扱うデータと状態を壊れにくい型として設計します。既存JavaScriptプロジェクトの移行は次のコースで扱います。

1
オブジェクト型とinterface
01. interface15分
02. 省略可能なプロパティ15分
03. readonly15分
04. interfaceとtype15分
05. ネストした型15分
06. オブジェクト配列15分
07. つくる - Work型とProfile型20分
08. 第4章クイズ15分
2
union・リテラル型・型ガード
01. union型15分
02. リテラル型15分
03. 状態のunion15分
04. typeofで絞り込む15分
05. inと判別で絞り込む15分
06. 状態で表示を切り替える15分
07. つくる - 状態の型表現20分
08. 第5章クイズ15分
3
ジェネリクス入門
01. なぜジェネリクスか10分
02. ジェネリック関数15分
03. 配列を返す汎用関数15分
04. 制約付きジェネリクス15分
05. 組み込みのジェネリクス15分
06. つくる - 汎用フィルタ関数20分
07. 第6章クイズ15分

組み込みのジェネリクス

string[] は Array の略記

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

TypeScript

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

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

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

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

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

TypeScript

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

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

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

TypeScript

const n = await p; // n は number

fetch の戻り値を読み解く

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

TypeScript

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

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

TypeScript

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":"スキル一覧の表"}]) → ["スキル一覧の表"]

ヒント

`string[]` と `Array<string>` は同じ意味です。ここでは後者の書き方を使います

引数の型引数の中には、`title` と `published` を持つオブジェクトの形をそのまま書きます

組み立て用の配列に型を書かないと、要素の型が決まらず `push` の中身を検査できません

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/06

関連レッスン

  • つくる - 汎用フィルタ関数

    filterBy関数を型引数付きで完成させ、型安全な汎用処理を書けるようにします。

  • 第6章クイズ

    ジェネリクスと型の制約の理解を確認します。

  • 制約付きジェネリクス

    idを持つ物だけを受け取る関数を書き、型引数に条件を付けられるようになります。

  • 配列を返す汎用関数

    配列を逆順で返す関数を書き、配列の入出力を型引数で表せるようになります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 配列サイズ固定の同型データの集まり
  • 引数位置引数=順番で渡す。
  • Promise非同期の結果を表すラッパーオブジェクト
  • fetchブラウザ標準の HTTP クライアント API
  • 戻り値呼び出し元への返答を表す点線矢印
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • 関数処理に名前を付けて再利用できる単位
main.ts
学習モード
エディタを読み込んでいます

メモ

組み込みのジェネリクス

⌘S で保存