TypeScriptでany型を避ける方法|unknownや型ガードで安全に書く
TypeScript を使っているのに any を多用していては、型の恩恵をほぼ捨てているのと同じだ。この記事では、any を避けて型安全に書く具体的な方法を整理する。結論を先に言うと、「外部から来る不明な値は unknown で受け、型ガードで絞り込む」のが基本パターンになる。
なぜ any が危険なのか
any は「型チェックを無効化する」型だ。any を一度通すと、その先の型エラーが一切検出されなくなる。
const data: any = JSON.parse(input);
data.foo.bar.baz; // 実行時に落ちてもコンパイルは通ってしまう
これでは TypeScript を使う意味が薄れる。any は「型を諦めた印」だと考えよう。
① unknown で受ける
不明な値は any ではなく unknown で受ける。unknown は「使う前に型を確認しろ」と強制してくれる。
const data: unknown = JSON.parse(input);
// data.foo; // ← これはエラー。先に絞り込みが必要
② 型ガードで絞り込む
unknown を安全に使うには、型ガードで「これは○○型だ」と確定させる。
function isUser(v: unknown): v is { name: string } {
return typeof v === 'object' && v !== null && 'name' in v;
}
if (isUser(data)) {
console.log(data.name); // ここでは安全に使える
}
③ ジェネリクスで汎用性を保つ
「何の型か呼び出し側で変わる」ケースは、any ではなくジェネリクスで型を引き回す。
function first<T>(arr: T[]): T | undefined {
return arr[0];
}
const n = first([1, 2, 3]); // number | undefined と推論される
④ 型アサーションは最小限に
as による型アサーションは「自分が責任を持つ」宣言だ。便利だが乱用は any と同じ危うさがある。本当に型が分かっている箇所だけに留める。
どうしても any を使うときは
外部ライブラリの型が壊れているなど、やむを得ない場合は // eslint-disable-next-line などで意図的だと明示し、範囲を最小化する。「うっかり any」と「意図的 any」を区別できる状態にしておくのが大事だ。

📚 おすすめ書籍
プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで Software Design plus
参考価格¥3,212(税込)
TypeScriptを完全習得するための定番書
Amazonで最新価格をチェックまとめ
anyは型チェックを無効化する。乱用は TypeScript を使う意味を消す- 不明な値は
unknownで受け、型ガードで絞り込む - 汎用性が要るならジェネリクスで型を引き回す
- 型アサーション
asは最小限に。やむを得ない any は意図を明示する