【入門編】 anyとunknownの比較とベストプラクティス – TypeScript実践ガイド

やあ、TypeScriptの世界へようこそ!ここまで学んできた皆さんなら、「型」という強力な武器を手にしているはずです。でも、いざ開発を始めると、どうしても「型がわからない…!」という迷路に迷い込むことがありますよね。

そんな時、つい魔が差して使ってしまうのが、悪名高い(?)`any`という呪文です。今日は、この`any`という「禁断の果実」と、その代わりとなる「誠実な守護者」である`unknown`について、現場の知見を交えてお話ししますね。

—

1. `any`は「なんでもあり」という甘い罠

まずは`any`から。これは「TypeScriptのルールをすべて無視する」という、いわば「なんでも詰め込める魔法の箱」です。

let myBox: any = “こんにちは”;
myBox = 123; // エラーにならない!
myBox.run(); // 実行時までエラーにならない(そして実行時にクラッシュする)

便利そうに見えますよね?「型定義が面倒だから`any`でいいや」と思う気持ち、痛いほどよくわかります。でも、現場で`any`を使うことは「時限爆弾をコードの中に隠している」のと同じなんです。

`any`を使うと、TypeScriptは「君が何をしても文句は言わないよ」と諦めてしまいます。その結果、本来なら開発中に見つかるはずだった重大なバグが、ユーザーのブラウザ上で突然「画面が真っ白!」という形で爆発することになるのです。

2. `unknown`は「中身を確認してから使う」という誠実な箱

そこで登場するのが`unknown`です。これは「中身はわからないけれど、とりあえず運べる箱」。

`any`との決定的な違いは、「使う前に必ず中身を確認しなければならない」というルールがあることです。これが実は、最強の防衛策なんです。

`unknown`の例え話:お買い物で届いた謎の小包

通販で届いた小包を想像してみてください。

  • `any`:中身を見ずにいきなり「これはバナナだ!」と言って皮を剥こうとする(中身が包丁だったら大変ですよね)。
  • `unknown`:中身が何かわからないので、まずは箱を開けて「中身が果物か?」を確認してから調理する。

TypeScriptは、この「確認」を強制することで、あなたのコードを守ってくれます。

let mysteryData: unknown = “TypeScript”;

// mysteryData.toUpperCase();
// ↑ これをやろうとすると「おっと、中身がstringか確認してないよ!」と怒られる

// だから、こうやって確認する(型ガードといいます)
if (typeof mysteryData === “string”) {
console.log(mysteryData.toUpperCase()); // これなら安全!
}

3. どうしても型を確定させたい時は「型アサーション」

とはいえ、たまには「いやいや、これは絶対にstringだとわかっているんだ!」という場面もありますよね。そんな時に使うのが型アサーション(as)です。

これは「TypeScript先生、私が責任を持つから、これはstringとして扱ってください!」と宣言する行為です。

let userInput: unknown = “こんにちは、世界”;

// 「as string」と書くことで、unknownから強引にstringへ変身させる
let message = userInput as string;

console.log(message.length); // 安全に使えるようになる

ここが重要です!
型アサーションはあくまで「自己申告」です。もし`userInput`が本当は数字の`123`だったとしても、`as string`と書けばTypeScriptは信じてしまいます。だからこそ、乱用は厳禁。本当に確信がある時だけ使う、スパイスのようなものだと思ってください。

—

今日からできるベストプラクティス

1. `any`は禁止カードにしよう:プロジェクト全体で`any`を禁止してもいいくらいです。それくらい`any`は依存症になりやすい。
2. 迷ったら`unknown`を使おう:APIから返ってきたデータなど、型が不確定なときはとりあえず`unknown`にしておけば、必ず「型チェック」をする癖がつきます。
3. 「確認」をサボらない:`if`文や`typeof`を使って「中身が何者か」を検証する。この泥臭い作業こそが、堅牢なフロントエンドを作る一番の近道です。

TypeScriptの型エラーは、コードを書いている最中に「それ危ないよ!」と教えてくれる優しい警告です。`any`で思考停止するのではなく、`unknown`と対話しながら安全なコードを書く楽しさを、ぜひ味わってみてください。

大丈夫、最初は難しく感じるかもしれませんが、その「型を考える時間」こそが、将来のあなたを助ける最強の保険になりますよ。一緒に頑張りましょう!

コメント

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