1. 3 件中 2 件が公開中
  2. すべて公開中
  3. 公開中が 1 件も無い
  4. 作品がまだ 1 件も無い
  5. url 付きでも同じように取り出せる
コース一覧
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分

オブジェクト配列

Work をまとめて Work[]

作品は普通、1 件ではなく一覧で扱います。配列の型は要素の型に [] を付けるだけなので、Work の配列は Work[] です。

TypeScript

interface Work { readonly id: number; title: string; published: boolean; url?: string; } const works: Work[] = [ { id: 1, title: "プロフィールサイト", published: true }, { id: 2, title: "自己紹介カード", published: false }, { id: 3, title: "スキル一覧の表", published: true }, ];

要素が 1 つでも形を外れていれば、その要素の位置でエラーになります。どの行が悪いのかまで教えてくれるので、データの取り違えを一覧単位で防げます。

取り出した要素にも型が付く

Work[] から取り出したものは Work です。だから続けてドットで読めます。

TypeScript

const first = works[0]; console.log(first.title); // プロフィールサイト

map と filter が効くようになる

第3章で見たコールバックの型が、ここで本領を発揮します。

TypeScript

const titles: string[] = works.map((work) => work.title);

works が Work[] なので、コールバックの work は書かなくても Work に決まります。work.title は string なので、map の結果は string[] と推論されます。ここで work.titel と打てば止まりますし、結果を number[] に入れようとしても止まります。

filter も同じです。

TypeScript

const published: Work[] = works.filter((work) => work.published);

filter は要素を選ぶだけなので、結果の型は元と同じ Work[] です。この 2 つをつなぐと、一覧の加工がひととおり書けます。

TypeScript

const publishedTitles: string[] = works .filter((work) => work.published) .map((work) => work.title);

React で作品カードを並べるときに書くのは、まさにこの形です。

手を動かす

演習では Work[] を受け取り、公開中の作品だけのタイトル一覧を返す関数を書きます。

要件

  1. publishedTitles の引数に Work の配列を表す型を付ける
  2. published が true の作品だけを残す
  3. 残した作品の title だけを並べた配列を返す

入出力例

publishedTitles([{"id":1,"published":true,"title":"プロフィールサイト"},{"id":2,"published":false,"title":"自己紹介カード"},{"id":3,"published":true,"title":"スキル一覧の表"}]) → ["プロフィールサイト","スキル一覧の表"] publishedTitles([{"id":1,"published":true,"title":"プロフィールサイト"},{"id":2,"published":true,"title":"自己紹介カード"}]) → ["プロフィールサイト","自己紹介カード"] publishedTitles([{"id":2,"published":false,"title":"自己紹介カード"}]) → [] publishedTitles([]) → [] publishedTitles([{"id":3,"published":true,"title":"スキル一覧の表","url":"https://example.com/skills"}]) → ["スキル一覧の表"]

ヒント

`Work` の配列を表す型は `Work[]` です

残す作業は `filter`、形を変える作業は `map` です

`filter` の結果に続けて `map` をつなげると 1 行で書けます

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

関連レッスン

  • つくる - Work型とProfile型

    トラック共通のWork型とProfile型を完成させ、React実践へ持ち込める資産にします。

  • 第4章クイズ

    interfaceとオブジェクト型の理解を確認します。

  • union型

    文字列または数値を受ける値を書き、AまたはBを型にできるようになります。

  • なぜジェネリクスか

    any版の汎用関数で起きる事故を見て、型引数で汎用化する動機を説明できるようになります。

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

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

  • 配列サイズ固定の同型データの集まり
  • コールバック子から親へ通知するための関数 props
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
main.ts
学習モード
エディタを読み込んでいます

メモ

オブジェクト配列

⌘S で保存