1. どちらも正しく入っている
  2. 前後に空白が付いている
  3. タイトルが空白だけ
  4. 作品数が数字ではない
  5. 作品数が未入力
  6. どちらも未入力ならタイトルの指摘が先
コース一覧
JavaScriptをTypeScriptへ移行する
DOMと型

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分

DOMと型

画面まわりにも型がある

データと関数が終わったので、最後は画面を触るコードです。ブラウザの部品にも TypeScript の型が用意されています。

これまでの JavaScript ではこう書いていました。

JavaScript

const input = document.getElementById("title"); const title = input.value;

そのまま .ts にすると、いきなり 2 件エラーが出ます。

見つからないかもしれない

1 件目はこれです。

プレーンテキスト

'input' is possibly 'null'.

getElementById が返すのは HTMLElement | null です。その id の部品がページに無ければ null が返るので、TypeScript は「無い場合を考えていませんね」と止めます。

TypeScript

const input = document.getElementById("title"); if (input === null) { return; }

第5章でやった型ガードが、そのまま出てきています。

部品の種類までは分からない

2 件目はこれです。

プレーンテキスト

Property 'value' does not exist on type 'HTMLElement'.

value を持っているのは入力欄の型である HTMLInputElement で、すべての部品が持つわけではありません。見出しの部品には value はありません。だから HTMLElement のままでは読めません。

種類が分かっているときは、こちらから教えます。

TypeScript

const input = document.querySelector<HTMLInputElement>("#title"); if (input === null) { return; } const title = input.value;

querySelector は山カッコで型を渡せます。第6章で見たジェネリクスの形です。getElementById の場合は as HTMLInputElement と書いて型を上書きします。

ただし as は「私が保証します」という宣言で、検査ではありません。間違えても TypeScript は止めてくれないので、種類が確実に分かっているところだけで使います。

入力欄の値はいつも文字列

もう 1 つ、型が教えてくれる大事な事実があります。入力欄の value は、数値入力の欄であっても string です。

TypeScript

const count = countInput.value; // count は string。12 ではなく "12"

これを数えるつもりで足すと、"12" + 1 で "121" になります。JavaScript のころは動いてから気付いていた事故で、型を付けると入口で気付けます。

つまり画面から来た値は、まず文字列として受け取り、自分で数値へ直し、直せたかどうかを確かめる、という手順が要ります。

手を動かす

演習では、入力欄から取り出したあとの部分を書きます。フォームから来た 2 つの文字列を受け取り、中身を確かめて登録用の一行を作ってください。value がいつも文字列であることが、そのまま課題になっています。

要件

  1. title と countText に型注釈を付ける
  2. タイトルが空のときは タイトルを入力してください を返す
  3. 作品数が空、または数値に直せないときは 作品数は数字で入力してください を返す
  4. 検査の順番はタイトルが先
  5. どちらも通ったら 「タイトル」をN件として登録します を返す

入出力例

parseWorkForm("プロフィールサイト", "3") → "「プロフィールサイト」を3件として登録します" parseWorkForm(" 自己紹介カード ", " 1 ") → "「自己紹介カード」を1件として登録します" parseWorkForm(" ", "3") → "タイトルを入力してください" parseWorkForm("スキル一覧の表", "さんけん") → "作品数は数字で入力してください" parseWorkForm("スキル一覧の表", "") → "作品数は数字で入力してください" parseWorkForm("", "") → "タイトルを入力してください"

ヒント

フォームから来る値はどちらも文字列です。引数の型は 2 つとも同じになります

空かどうかは、空白を取り除いた文字列が空文字と等しいかで判定できます

数値に直せたかどうかは `Number.isNaN` で確かめられます。空文字は数値の 0 になってしまうので、別に弾きます

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

関連レッスン

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

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

  • 自由移行

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

  • 完成と次のステップ

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

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

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

  • 関数処理に名前を付けて再利用できる単位
  • ブラウザユーザーから見たWebのクライアント
  • TypeScript静的型を加えた JavaScript の上位互換
  • JavaScriptWeb で動的な振る舞いを担う言語
  • ジェネリクス<String> のように型を指定する仕組み
  • フォームinput(text, email, password, checkbox, radio)、select、textarea、button。
  • 型注釈変数や引数に : 型 で宣言する書式
main.ts
学習モード
エディタを読み込んでいます

メモ

DOMと型

⌘S で保存