Day 1・変数・基本型・関数
anyを避ける・unknownとの違い
型チェックを無効化する any の危うさと、安全な受け皿である unknown の違いを理解する。
any は「型チェックをやめる」宣言
は「どんな型でもOK、チェックしないで」という特別な型です。一見便利ですが、これを付けた瞬間にTypeScriptの守りが消えます。せっかく型で間違いを防いでいたのに、any の部分だけは何をしてもエラーが出なくなるのです。
let data: any = "文字列です";
// 本当は文字列なのに、数値のように扱ってもエラーにならない
const result = data * 2; // 実行するとおかしな結果(NaN)
data.foo.bar.baz; // 存在しないのにエラーにならないany は「型の穴」
any は一箇所付けるだけで、そこから先の値も次々と any になって広がります。エラーが出ないので一見動いているように見えますが、実際には型の守りに穴が空いた状態。急いでいるときの一時しのぎで入れて、そのまま残りがちなので注意します。
unknown:「まだ何か分からない」を安全に扱う
も「どんな型か分からない値」を表しますが、any と決定的に違います。unknown はそのままでは使えず、「これは文字列だと確認できたら文字列として使う」というチェックを強制されます。安全な受け皿だと考えてください。
any:チェックなしで使えてしまう
function len(x: any) {
return x.length; // xが数値でもエラーなし→実行時に壊れる
}unknown:確認しないと使えない
function len(x: unknown) {
if (typeof x === "string") {
return x.length; // 文字列と確認できた中だけで使える
}
return 0;
}AIプロダクトで unknown が効く場面
AIのAPIや外部サービスから返ってくるデータは、届くまで中身が確実には分かりません。ここを any にすると想定外の形でも素通りしてしまいます。unknown で受けて「必要な形か確認してから使う」ことで、AIの応答が想定と違ったときに安全側で止められます。
どうしても型が分からないときの向き合い方
「型が分からないから any にしておこう」と思ったら、まず unknown を試します。それでも面倒なときは、AIに「この値の正しい型を書いて」と頼むのが近道です。型を捨てるのではなく、正しい型を用意する方向で考える習慣が、後々のバグを大きく減らします。
AIにはこう聞く
「この any を、安全な unknown と型の絞り込み(型ガード)で書き直して」と頼むと、typeof などで確認してから使う安全な形に直してくれます。any を見つけたらこの一言、と覚えておくと便利です。
- any は型チェックを止めるので、間違いが素通りする
- any は周りにも広がり、型の守りに穴を空ける
- unknown は「確認してからでないと使えない」安全な受け皿
- 外部やAIから来るデータは unknown で受けて確認するのが安全
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
any と unknown の違いとして正しいものはどれ?
外部APIやAIの応答など「届くまで形が確実でないデータ」を受け取るとき、まず選ぶべき型はどれ?
なぜ any をできるだけ避けるべきなのか、初学者に説明するつもりで書いてください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。