1. 3 件中 1 件が済み
  2. 1 件だけで済んでいる
  3. 対象が 1 件も無い
  4. まだ 1 件も終わっていない
  5. 4 件中 3 件が済み
コース一覧
JavaScriptをTypeScriptへ移行する
自由移行

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分

自由移行

教材ではないコードでやってみる

ここまでは、こちらが用意した JavaScript を移してきました。最後に、自分が過去に書いたコードを 1 本選んで移してみてください。教材と違って、型が素直に決まらない箇所が必ず出てきます。そこで詰まった経験が、この章でいちばん残るものです。

選び方

選ぶ基準は 3 つです。1 つ目は 100 行以下であること。2 つ目は、画面を触らない純粋な処理が中心であること。3 つ目は、動いていることを自分で確かめられることです。

JavaScript入門や実践JavaScriptで書いた関数、家計簿の集計、日付の整形あたりがちょうどよい大きさです。

手順は変わらない

やることは第7章の 3 レッスンと同じです。

プレーンテキスト

1. .js を .ts にする 2. 引数と、外に出す値に型を付ける 3. 出たエラーを上から 1 件ずつ読んで直す 4. any を検索して、残っていたら潰す

手順 4 を忘れないでください。移行の途中で置いた仮の any は、放っておくと必ず残ります。

詰まりやすいところ

自分のコードでよく起きるのが、1 つの変数に別々の形を入れていた、という事態です。

TypeScript

let result = ""; result = 0; // エラー Type 'number' is not assignable to type 'string'.

JavaScript では書けてしまいますが、読む人には追えません。ここは型に合わせてコードを直す場面です。変数を 2 つに分けるのが正解のことが多いです。

もう 1 つは、null が返るかもしれない関数です。find や getElementById がこれにあたります。使う前に確かめる、という形に書き直します。

進み具合を数える

移すファイルが複数あるときは、第47レッスンで書いた一覧を更新しながら進めます。

プレーンテキスト

works.ts 済 format.ts 未 count.ts 未

残りが見えていると、今日どこまでやるかを決められます。演習では、この一覧そのものを扱う関数を書きます。

手を動かす

移行の進み具合を報告する関数を作ってください。自分のプロジェクトに当てはめて動かせる形にしてあります。

この関数を書いたら、実際に自分のコードを 1 本移してみてください。エラーが 0 件になったところが、このコースの本当の修了地点です。

要件

  1. ファイル 1 件の形を MigrationFile という名前で定義する
  2. 引数と戻り値に型を付ける
  3. 対象が 1 件も無いときは 移行対象がありません を返す
  4. 全部終わっているときは N件すべて移行済みです を返す
  5. 途中のときは N件中M件が移行済みです。残りは... を返す

入出力例

migrationReport([{"done":true,"name":"works.ts"},{"done":false,"name":"format.ts"},{"done":false,"name":"count.ts"}]) → "3件中1件が移行済みです。残りはformat.ts、count.ts" migrationReport([{"done":true,"name":"works.ts"}]) → "1件すべて移行済みです" migrationReport([]) → "移行対象がありません" migrationReport([{"done":false,"name":"works.ts"},{"done":false,"name":"format.ts"}]) → "2件中0件が移行済みです。残りはworks.ts、format.ts" migrationReport([{"done":true,"name":"works.ts"},{"done":true,"name":"profile.ts"},{"done":false,"name":"form.ts"},{"done":true,"name":"count.ts"}]) → "4件中3件が移行済みです。残りはform.ts"

ヒント

`interface MigrationFile` はプロパティ 2 つだけです

対象が無いかどうかの判定を、いちばん先に置きます

残りが 0 件かどうかは、絞り込んだあとの配列の長さで分かります

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

関連レッスン

  • 完成と次のステップ

    移行したコードを振り返り、React実践へ進む道筋を確認します。

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

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

  • DOMと型

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

  • 型エラーを潰す

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

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

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

  • JavaScriptWeb で動的な振る舞いを担う言語
  • 処理計算や代入を表す長方形
  • 関数処理に名前を付けて再利用できる単位
  • 変数データに名前をつけて参照する仕組み
  • 引数位置引数=順番で渡す。
  • 戻り値呼び出し元への返答を表す点線矢印
main.ts
学習モード
エディタを読み込んでいます

メモ

自由移行

⌘S で保存