TypeScriptで「anyを使うな」と言われる理由
TypeScriptを使い始めるとよく言われることがあります。
anyは使うな- なぜ使ってはいけないのか
- どんな問題があるのか
がよく分からないと思います。
この記事では
- anyとは何か
- anyの問題点
- anyの代替方法
を解説します。
anyとは?
anyは、どんな型でも許可する型です。
例
let value: any = "hello"
value = 123
value = true
value = {}どんな値でも代入できます。
また
value.toUpperCase()
value.toFixed()
value.notExist()このようなコードでもTypeScriptはエラーを出しません。
anyの問題点
anyを使うと
TypeScriptの型チェックが無効になるという問題があります。
例
function add(a: any, b: any) {
return a + b
}
add("10", 20)結果
1020本来
30を期待していてもエラーが出ません。
TypeScriptの意味がなくなる
TypeScriptの最大のメリットは
型安全(Type Safety)です。
しかし
let data: anyと書いてしまうと
JavaScriptと同じ状態になります。
つまり
TypeScriptを使う意味がなくなるということです。
unknownを使う
anyの代わりにunknown型を使う方法があります。
例
let value: unknown
value = "hello"
value = 123unknownは、値をそのまま使うことができません。
value.toUpperCase()エラーになります。
型チェックを行う
unknownの場合、型チェックが必要です。
let value: unknown = "hello"
if (typeof value === "string") {
console.log(value.toUpperCase())
}このように
安全なコードを書くことができますanyを使ってもいいケース
anyは基本的に避けるべきですが例外もあります。
外部ライブラリ
型が定義されていないライブラリ
let lib: any移行プロジェクト
JavaScript → TypeScriptの移行時
一時的なコード
開発途中の仮コード
実務でのおすすめルール
実務では次のルールがよく使われます。
基本は any を使わない代わりに
- unknown
- 型定義
- Generics
を使います。
まとめ
anyは
すべての型を許可する型ですが
型チェックが無効になるという問題があります。
そのため
anyはなるべく使わないことが推奨されています。
代わりに
unknownを使うと安全なコードを書くことができます。
次回は、TypeScript Generics入門

コメント