自由移行

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

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

選び方

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

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

手順は変わらない

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

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

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

詰まりやすいところ

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

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

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

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

進み具合を数える

移すファイルが複数あるときは、第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"

ヒント

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

メモ

自由移行

⌘S で保存