TS初めてのTypeScript

Day 1変数・基本型・関数

anyを避ける・unknownとの違い

型チェックを無効化する any の危うさと、安全な受け皿である unknown の違いを理解する。

any は「型チェックをやめる」宣言

は「どんな型でもOK、チェックしないで」という特別な型です。一見便利ですが、これを付けた瞬間にTypeScriptの守りが消えます。せっかく型で間違いを防いでいたのに、any の部分だけは何をしてもエラーが出なくなるのです。

TYPESCRIPT
let data: any = "文字列です";

// 本当は文字列なのに、数値のように扱ってもエラーにならない
const result = data * 2;   // 実行するとおかしな結果(NaN)
data.foo.bar.baz;          // 存在しないのにエラーにならない
any は間違いを見逃す

any は「型の穴」

any は一箇所付けるだけで、そこから先の値も次々と any になって広がります。エラーが出ないので一見動いているように見えますが、実際には型の守りに穴が空いた状態。急いでいるときの一時しのぎで入れて、そのまま残りがちなので注意します。

unknown:「まだ何か分からない」を安全に扱う

も「どんな型か分からない値」を表しますが、any と決定的に違います。unknown はそのままでは使えず、「これは文字列だと確認できたら文字列として使う」というチェックを強制されます。安全な受け皿だと考えてください。

any:チェックなしで使えてしまう

TYPESCRIPT
function len(x: any) {
  return x.length; // xが数値でもエラーなし→実行時に壊れる
}

unknown:確認しないと使えない

TYPESCRIPT
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に噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

any と unknown の違いとして正しいものはどれ?

Q2

外部APIやAIの応答など「届くまで形が確実でないデータ」を受け取るとき、まず選ぶべき型はどれ?

Q3

なぜ any をできるだけ避けるべきなのか、初学者に説明するつもりで書いてください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。