【入門編】 ユーザー定義型ガード (isキーワード) – TypeScript実践ガイド

TypeScriptの「型ガード」で、コードの迷子を卒業しよう!

こんにちは!フロントエンドの世界へようこそ。
TypeScriptを触り始めると、最初に出会う「型」の壁に、誰もが一度は「もう!なんでわかってくれないの!」と頭を抱えたことがあるはずです。

特に、データが「これなのか?あれなのか?」と曖昧なとき、TypeScriptは非常に慎重で、少しでも不安があると「そのデータ、何が入っているか保証できないから操作させないよ!」とストップをかけてきますよね。

今日は、そんなTypeScriptに「大丈夫、中身はちゃんと確認したから!」と教えてあげる魔法の呪文、「ユーザー定義型ガード(`is` キーワード)」について、一緒に紐解いていきましょう。

—

「箱の中身」を見ずに開けようとすると怒られる

想像してみてください。あなたは今、スーパーでお買い物をしていて、レジ袋(変数)をいくつか持っています。

  • 袋Aには「りんご(string)」が入っている
  • 袋Bには「数字の100(number)」が入っている
  • 袋Cには「何が入っているか分からないもの(unknown)」が入っている

TypeScriptという名の厳しい店員さんは、袋Cを勝手に開けようとすると「中身が腐っているかもしれないし、爆発するかもしれない!危険だから確認してからにして!」と止めてきます。

この「確認作業」をスマートに行うのが、型ガードです。

—

`is` キーワードの正体:TypeScriptへの「身分証」提示

型ガードとは、一言で言えば「この関数を通れば、中身が何であるか保証するよ」という証明書を発行する機能です。

`is` というキーワードを使うと、関数が「true」を返した時に、「あ、それならこいつは間違いなく『りんご』だね!」とTypeScriptが納得してくれるようになります。

サンプルコードで見てみよう

例えば、「送られてきたデータが『文字列の配列』であるかどうか」を判定するケースを考えてみましょう。

// 型ガード関数の定義
// 引数である value は unknown(何かわからない状態)
// 戻り値の `value is string[]` が「証明書」の役割を果たします
function isStringArray(value: unknown): value is string[] {
// まず、配列かどうかを確認(Array.isArrayはJSの標準機能)
if (!Array.isArray(value)) return false;

// 配列の中身がすべて文字列かどうかを確認
return value.every((item) => typeof item === ‘string’);
}

// 実際に使ってみる場面
const data: unknown = [“TypeScript”, “JavaScript”, “React”];

if (isStringArray(data)) {
// ここではもう、TypeScriptは「dataはstring[]だ」と確信しています!
// だから、配列専用のメソッド .map も安心して使えます。
console.log(data.map((s) => s.toUpperCase()));
} else {
console.log(“これは文字列の配列じゃなかったよ!”);
}

なぜこれが「最強」の武器なのか?

初心者の方がよくやりがちなのが、`any` を使って「全部許して!」と逃げてしまうこと。でも、`any` を使うと、せっかくTypeScriptが守ってくれていた安全網が消滅してしまいます。

この `is` キーワードを使った型ガードは、「型を絞り込む」というプロセスを自分自身でコントロールできるんです。

  • 嘘をつかない: ちゃんと中身をチェックするロジックを書くので、バグが減ります。
  • 安心感が違う: `if` 文の中に入った瞬間、エディタが補完候補を出してくれるあの感動は、一度味わうと病みつきになりますよ。

—

初心者さんへのアドバイス:まずは難しく考えすぎないで

最初は「`value is string[]` なんて書き方、覚えられないよ……」と思うかもしれません。でも、大丈夫です。

最初は「型ガードを作るときは、`引数 is 型` と書くんだな」とだけ覚えておいてください。これだけで、あなたのコードは格段にプロフェッショナルな品質に近づきます。

  • 「このデータ、さっき確認したはずなのに、なんでTypeScriptはエラーを吐くんだろう?」
  • 「`any` を使わずに、もっときれいに型を絞り込みたい!」

そんな風に悩んだ時こそ、この「型ガード」の出番です。
泥臭く一つずつ、データの正体を暴いていってあげる。その丁寧な作業の積み重ねが、堅牢で美しいWebアプリケーションを作る一番の近道です。

TypeScriptは、あなたの敵ではなく、最高のパートナーです。ぜひ、今日から少しずつ、この「型ガード」をコードの中に忍ばせてみてくださいね。

応援しています!

コメント

タイトルとURLをコピーしました