1. 3 件のうち 2 件まで並べる
  2. 上限より少ないので全部並ぶ
  3. ちょうど上限と同じ件数
  4. 作品がまだ 1 件も無い
  5. 上限が 1 件のとき
コース一覧
JavaScriptをTypeScriptへ移行する
関数のTS化

JavaScriptをTypeScriptへ移行する

tsconfigとstrict設定、移行順序、データ層・関数・DOMの型付け、型エラーの解消を通して、既存JavaScriptを段階的にTypeScriptへ移行する全9レッスンの実践プロジェクトです。完成済みのプロフィールサイトを止めずに、ファイル単位で安全なTypeScriptへ置き換えます。

1
実践 JSをTSに移行する
01. tsconfigのきほん10分
02. 移行の進め方10分
03. データ層のTS化15分
04. 関数のTS化15分
05. 型エラーを潰す15分
06. DOMと型15分
07. つくる - 丸ごとTS化完了20分
08. 自由移行20分
09. 完成と次のステップ10分

関数のTS化

次はユーティリティ関数

データ層が終わったので、次はそれを加工する関数群です。整形したり数えたりする小さな関数が集まったファイルで、画面のことは知りません。

ここでやることも同じです。引数に型を付ける、外へ出す値に型を付ける、出たエラーを読む、の順です。

変数に入れた関数には関数型を書く

ユーティリティのファイルには、アロー関数を変数に入れた書き方がよく出てきます。

JavaScript

const withBrackets = (title) => "「" + title + "」";

これを移すと、引数の title が any になってエラーです。書き方は 2 通りあります。

TypeScript

// 引数と戻り値に直接付ける const withBrackets = (title: string): string => "「" + title + "」"; // 変数のほうに関数型を付ける type Formatter = (title: string) => string; const withBrackets: Formatter = (title) => "「" + title + "」";

下の書き方だと、アロー関数の中に型を書かなくても title が string だと分かります。変数の型から中身へ型が流れているからです。同じ形の関数がいくつも並ぶファイルでは、こちらのほうが短くなります。

配列メソッドは型が勝手に付いてくる

第3章で見たとおり、map や filter に渡すコールバックの引数には型を書きません。

TypeScript

const titles: string[] = ["プロフィールサイト", "自己紹介カード"]; const decorated = titles.map(withBrackets); // decorated は string[]

titles が string[] なので、map は「string を受け取る関数」しか受け付けません。関数の側を先に型付けしておくと、こういう組み合わせの間違いも止まります。

TypeScript

const counts: number[] = [1, 2, 3]; counts.map(withBrackets); // エラー Argument of type 'Formatter' is not assignable to ...

数え間違いは型では止まらない

注意しておきたいのは、型が守るのは形だけだ、ということです。

TypeScript

function restCount(titles: string[], max: number): number { return titles.length - max; }

この関数は、max のほうが大きいとマイナスを返します。型としては何も間違っていないので、tsc は黙っています。

移行のときは、型エラーが消えた時点で終わりにしないでください。型が消してくれるのは打ち間違いと形の不一致で、数の扱いは自分で確かめる必要があります。

手を動かす

演習では、作品タイトルの一覧を表示用の一行に整える関数を移行します。アロー関数のほうにも型が要ることに注意してください。件数がはみ出したときの扱いも、自分で確かめながら書きます。

要件

  1. withBrackets の引数に型を付ける
  2. formatWorkList の引数と戻り値に型を付ける
  3. 並べるタイトルはかぎカッコで囲み、読点でつなぐ
  4. max を超えた分だけ ほかN件 を末尾に足す
  5. 処理の中身は変えない

入出力例

formatWorkList(["プロフィールサイト","自己紹介カード","スキル一覧の表"], 2) → "「プロフィールサイト」、「自己紹介カード」ほか1件" formatWorkList(["プロフィールサイト"], 2) → "「プロフィールサイト」" formatWorkList(["プロフィールサイト","自己紹介カード"], 2) → "「プロフィールサイト」、「自己紹介カード」" formatWorkList([], 2) → "" formatWorkList(["プロフィールサイト","自己紹介カード","スキル一覧の表"], 1) → "「プロフィールサイト」ほか2件"

ヒント

アロー関数を変数に入れたときは、引数に直接書くか、変数のほうに関数型を書きます

関数型は `(引数名: 型) => 戻り値の型` の形です

`formatWorkList` の引数は文字列の配列と数値、戻り値は文字列です

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

関連レッスン

  • 型エラーを潰す

    移行で出た型エラーを全部読み解いて解消し、エラーメッセージを自力で直せるようになります。

  • DOMと型

    フォーム取得のコードに型を付け、DOM操作の型を扱えるようになります。

  • つくる - 丸ごとTS化完了

    React入門の関数とデータ層の移行を終え、プロジェクト全体をTypeScriptに載せ替えます。

  • 自由移行

    過去に自分で書いたコードを1本選び、TypeScriptへ移行します。

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

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

  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
  • 変数データに名前をつけて参照する仕組み
  • アロー関数=> で書く軽量な関数。this を継承する
  • 配列サイズ固定の同型データの集まり
  • メソッドクラスに属する関数
  • コールバック子から親へ通知するための関数 props
  • 戻り値呼び出し元への返答を表す点線矢印
main.ts
学習モード
エディタを読み込んでいます

メモ

関数のTS化

⌘S で保存