【入門編】 アサーション関数 (assertsキーワード) – TypeScript実践ガイド

こんにちは!フロントエンドの現場で日々コードと格闘しているチーフアーキテクトです。

TypeScriptを触り始めたばかりの頃、「この値、絶対に文字列なはずなのに、TypeScriptくんが『いや、もしかしたら違うかもよ?』と疑ってきて全然進まない!」なんて経験、ありませんか?

いわゆる「型エラーとの追いかけっこ」ですね。そんな時、多くの初心者がつい使ってしまう禁断の果実が `any` 型です。でも、今日は `any` に頼らず、TypeScriptに「いいか、これは絶対こうなんだ!」と力強く言い聞かせる魔法の言葉、『アサーション関数(assertsキーワード)』についてお話しします。

—

1. 「お買い物」で例える、TypeScriptの慎重さ

TypeScriptはとても真面目な性格です。例えば、あなたがオンラインショップの注文画面で「合計金額」を計算しようとしているとします。

でも、サーバーから届いたデータが、「数字(number)」かもしれないし、何かの間違いで「空っぽ(null)」かもしれない。TypeScriptは、「もし空っぽだったら計算できないからエラーになるよ!ちゃんと確認して!」と、常にあなたを止めてくるわけです。

普通なら `if` 文でチェックしますが、いちいちチェックを繰り返すとコードがどんどん複雑になってしまいますよね。

そこで登場するのが `asserts` キーワードです。これは、いわば「入店ゲートのセキュリティチェック」のようなもの。

—

2. assertsキーワード:力強い門番を作る

`asserts` は、「もし条件が満たされていなかったら、その場でプログラムを止める(エラーを投げる)」という役割と、「条件をクリアしたら、TypeScriptに『もうこの値は大丈夫だよ』と教えてあげる」という2つの顔を持っています。

百聞は一見に如かず。実際にコードを見てみましょう。

// 値が文字列であるかを確認する「門番」関数
function assertIsString(value: unknown): asserts value is string {
// もし文字列じゃなかったら、ここで「入店拒否(エラー)」します
if (typeof value !== “string”) {
throw new Error(“文字列じゃないと困るよ!”);
}
// ここを通り抜ければ、TypeScriptは「あ、この値はもう絶対にstringだ!」と理解します
}

function processData(input: unknown) {
// ここではinputはまだ「何者か不明(unknown)」です

// 門番を通す!
assertIsString(input);

// 門番を通ったので、TypeScriptはinputを「string」として扱ってくれる
// だから、文字列専用の .toUpperCase() も安心して呼べる!
console.log(input.toUpperCase());
}

—

3. なぜ `any` を使うよりずっといいのか?

初心者の頃は、「とりあえず `any` にしちゃえ!」となりがちです。でも、`any` を使うと、TypeScriptの守護神としての機能をすべて無効にしてしまいます。「全部自由にしていいよ」というのは、実は「エラーが起きても何も教えてあげないよ」という地獄の入り口です。

対して `asserts` は、「危険な場所にはちゃんとガードレールを設置する」というアプローチです。

  • 安全: 間違ったデータが入ってきたら即座にエラーで止まるので、バグが広がりません。
  • 明確: コードを読んだ他の人が「ああ、ここでは文字列であることが保証されているんだな」とすぐに分かります。
  • 賢い: `asserts` を通った後は、その後のコードでわざわざ `if` 文を書かなくて済みます。

—

4. 現場で使えるちょっとしたコツ

例えば、フォームから送られてきたデータが「配列なのかどうか」をチェックしたい時も便利です。

function assertIsArray(value: unknown): asserts value is any[] {
if (!Array.isArray(value)) {
throw new Error(“配列じゃないと困るよ!”);
}
}

const data: unknown = [1, 2, 3];

assertIsArray(data);
// ここで data は「配列」だと確定したので、安心して .map() が使えます
data.map(item => console.log(item));

—

まとめ:TypeScriptと仲良くなるために

TypeScriptのエラーは、あなたを困らせようとしているのではなく、「安全なプログラムを作るためのヒント」をくれているだけなんです。

`asserts` キーワードは、そんなTypeScriptと対話するための強力なツールです。「確信がある場所」にはこの門番を配置して、自信を持ってコードを書いてみてください。

最初は難しく感じるかもしれませんが、大丈夫です。少しずつ「型」という武器を身につけていけば、今まで見えなかったバグの兆候が驚くほど見えるようになってきます。

もしまた詰まったら、いつでもここに戻ってきてくださいね。あなたのエンジニアライフを心から応援しています!

コメント

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