1. 3 か月分の平均
  2. 表示名が null のとき
  3. 表示名に空白が付いている
  4. 1 か月分だけ
  5. 四捨五入が起きる平均
コース一覧
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分

型エラーを潰す

エラーは怒っているのではない

移行の途中で、tsc が何十件もエラーを出すことがあります。ここで手が止まる人が多いのですが、エラーは全部「ここが噛み合っていません」という報告です。読み方さえ決まっていれば、順番に片付くだけの作業です。

上から 1 件ずつ、しか読まない

エラーは連鎖します。1 件直すと 5 件消えることが普通にあります。だから全部読んでから直そうとせず、いちばん上の 1 件だけを見て直し、もう一度走らせます。

読む場所は 3 つです。ファイル名と行番号、TS から始まる番号、そして本文です。

プレーンテキスト

src/utils/count.ts:2:7 - error TS2322: Type 'number' is not assignable to type 'string'.

2 行目の 7 文字目で、string と約束したところに number を入れている、と言っています。

よく出る 4 つを覚える

移行中に出るエラーは、ほとんどこの 4 種類です。

プレーンテキスト

TS7006 Parameter 'x' implicitly has an 'any' type.

引数に型を書き忘れています。書けば消えます。

プレーンテキスト

TS2322 Type 'A' is not assignable to type 'B'.

入れようとした値の型が、入れ先の型と違います。どちらが間違っているのか考えます。

プレーンテキスト

TS2339 Property 'lenght' does not exist on type 'string[]'.

無いプロパティを読んでいます。打ち間違いか、型の指定が違うかのどちらかです。

プレーンテキスト

TS18047 'label' is possibly 'null'.

null かもしれない値を、そのまま使っています。分岐で確かめてから使います。

型のほうを直すこともある

エラーが出たとき、直す先はコードとは限りません。

TypeScript

function workTitle(work: Work): string { return work.url; } // エラー Property 'url' does not exist on type 'Work'.

これは url を読むのが悪いのではなく、Work に url を書き忘れていた、という可能性があります。データの現物を見て、本当にその項目があるなら、Work のほうに url?: string を足すのが正解です。

エラーを黙らせるだけなら as any を付ければ消せます。ですが消えるのはエラーだけで、噛み合っていない事実は残ります。理由が分からないまま消さないでください。

手を動かす

演習では、移行の途中でエラーが 4 件出ている関数を渡します。上から 1 件ずつ読んで、全部消してください。エラーが消えたとき、計算の結果も正しくなっているはずです。

要件

  1. 型エラーを 4 件すべて消す
  2. 平均は四捨五入した整数にする
  3. 表示名は前後の空白を取り除いて使う
  4. 表示名が null のときは 全体 を使う
  5. 戻り値の形は Xは平均N件です のままにする

入出力例

averageCount([1,2,3], "ゆめさく") → "ゆめさくは平均2件です" averageCount([2,4], null) → "全体は平均3件です" averageCount([1,2], " たなか ") → "たなかは平均2件です" averageCount([5], "さとう") → "さとうは平均5件です" averageCount([1,2,3,4], "ゆめさく") → "ゆめさくは平均3件です"

ヒント

合計を入れる箱の型が、足し算の結果と噛み合っていません

`Did you mean` と教えてくれるエラーが 1 件あります。打ち間違いです

`null` かもしれない値は、そのまま使えません。先に分岐で確かめます

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

関連レッスン

  • DOMと型

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

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

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

  • 自由移行

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

  • 完成と次のステップ

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

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

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

  • 引数位置引数=順番で渡す。
  • プロパティメソッドを属性のようにアクセスできるようにするデコレータ。
  • 関数処理に名前を付けて再利用できる単位
  • 戻り値呼び出し元への返答を表す点線矢印
main.ts
学習モード
エディタを読み込んでいます

メモ

型エラーを潰す

⌘S で保存