SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptの限界を超える!TypeScript初めの一歩

【TypeScriptの基礎を学ぶ】JavaScriptと比較して起こりがちなミスを防ごう!

JavaScriptの限界を超える!TypeScript初めの一歩 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 この連載は、JavaScriptは使っているけれど、TypeScriptはまだ手を付けていない人向けのものです。負担なくTypeScriptを導入して、メリットを享受することを目指します。応用的なところには踏み込まないで、手軽にできて費用対効果が高いところを中心にあつかっていきます。第1回の今回は、JavaScriptで起きがちなミスとTypeScriptの導入を解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 この連載は、以下のように進んでいきます。

連載の進行
連載回数 説明
第1回 JavaScriptと比較してTypeScriptの基礎を学ぶ
第2回 TypeScriptで型を扱おう
第3回 TypeScriptで多様なデータに対応しよう
第4回 既存JavaScriptをTypeScriptに移行しよう
第5回 外部のパッケージやその他の情報

 第1回の今回は、JavaScriptで起きるミスを実感して、「こうだったらいいのに」という欲求をTypeScriptで叶えていきます。今回の記事は、次のような章立てで進みます。

第1回のもくじ
章立て 内容
第1章 JavaScriptで起こりがちなミス事例
第2章 TypeScriptとは何か? なぜ必要か?
第3章 環境構築
第4章 TypeScriptコードを書いてみる
第5章 tsconfig.jsonを設定する
第6章 冒頭のミスをTypeScriptで防いでみよう

第1章 JavaScriptで起こりがちなミス事例

 プログラムを書いていると、よくあるミスを何度もしませんか。それは凡ミスであったり、勘違いであったり、入力ミスだったりします。そうしたミスのうち、JavaScriptで起きそうなミスを、まずは見ていきましょう。

その1 プロパティ名ミス

 オブジェクトのプロパティ名を間違えるというミスは非常に多いです。例を示します。

main.js
// ユーザー情報の保存
function saveUser(user) {
    console.log("Name:", user.name);
    console.log("Email:", user.email);
}

// 呼び出し側
saveUser({
    neme: "佐藤太郎",   // タイプミス
    email: "tarou@example.com"
});
実行結果
Saving user: undefined
Email: tarou@example.com

 どこが間違っているのか分かるでしょうか。引数のオブジェクトのプロパティが、nemeになっています。正しくはnameです。

 こうしたミスは多いですが、目で見て気づくのは大変です。

その2 型ミス

 数値で欲しい値を文字列で受け取ってしまい処理を進めてしまうミスは、JavaScriptでよくしてしまいます。例を示します。

main.js
// 設定
function setup(config) {
    console.log("Config:", config);
}

// 呼び出し側
setup({
    retry: "3",   // numberなのに、stringで渡した
    timeout: 5000
});
実行結果
Config: { retry: '3', timeout: 5000 }

 retryの値が文字列になっています。関数側の意図としては、数値で受け取りたいところです。しかし文字列で受け取ってしまっています。

その3 プロパティを間違えて扱う

 オブジェクトのプロパティのネストが深いときに、undefinedであることに気が付かず、関数などを呼び出してしまうことは多いです。その例を示します。

main.js
// プロフィールの表示
function displayProfile(user) {
    console.log("Name:", user.name);
    console.log("Age:", user.age.toFixed(0));   // ageが未定義の可能性がある
}

// 呼び出し側
displayProfile({
    name: "太郎"    // ageは未設定
});
実行結果
Name: 太郎
~\main.js:4
    console.log("Age:", user.age.toFixed(0));
                               ^

TypeError: Cannot read properties of undefined (reading 'toFixed')

 ageが設定されていないため、ageの値はundefinedです。そのためtoFixedは使えずにエラーが発生します。

なぜミスが起きるのか?どうしたら防げるのか?

 こうしたミスは、なぜ起きるのでしょうか。原因の多くは、正しい値を受け渡せていないことや、検証していない値を利用していることにあります。

 不正な値の問題は、変数に入る値の型や、関数で入出力する値の型をチェックすることで、かなりの部分を防ぐことができます。

 しかしJavaScriptには、そのための仕様が存在しません。そうしたJavaScriptの仕様上の弱い部分を補うのがTypeScriptです。

次のページ
第2章 TypeScriptとは何か? なぜ必要か?

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21595 2025/07/18 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング