TypeScriptのany型はなぜ存在するのか?
初めに
TypeScriptを学ぶとこんな疑問浮かんだ事ないでしょうか。
「any型よ、なぜそなたは存在しているのか。。。」
any型はよく言えば非常に柔軟な型ですが、同時に型安全性を失う事になるため、実装時は極力使うな。というのは良く聞く話だと思います。では、なぜ極力使ってはダメなany型はこの世に存在しているのでしょうか。私は疑問に思っていました。
この記事では、any型の存在理由について、個人の考えをアウトプットしてみようと思います。理解が間違っていたら優しくご指摘いただけますと大変うれしいです。
any型の存在理由(推測)
考えた結論から。以下のようなケースが考えれる為に存在していると思います。
-
TypesScriptを段階的に導入(移行)していく時に一時的に使用する為。プロジェクトによっては、完全な型情報を持っていないか、または不完全な型情報しか持っていないケースが考えられる。このようなプロジェクトでは、一からすべての型情報を追加することは非現実的で、非常に時間とコストがかかるので、いきなり導入するのではなく、段階的に導入する際に一次的に使用するのではないかと思います。
-
実装したコードのどこかが間違ってて、TypeScriptのエラー含めて複数のエラーが出ている時に一次的に使用する為。型のエラーは自力では解決できないとなった際、とりあえずany型にして、他のエラーから一個ずつつぶしていくケース。
-
データ型が混在した配列を使う時にany型を使用する。
以下のようなコードだとany型は意図的に使えるかもしれませんね。(ちょっと無理矢理感ありますが)
let hogehoge: any[] = [100, "田中さん", 90, "鈴木さん"];
for (let item of hogehoge) {
console.log(item);
}
自分で例題あげておいてなんですが、以下のようにnumber型かstring型で指定する方がよいのかな。
let hogehoge: (number | string)[] = [100, "田中さん", 90, "鈴木さん"];
for (let item of hogehoge) {
console.log(item);
}
最後に
any型は絶対悪のイメージだったのですが、一度じっくり考えてみた結果としては、実は意図的に使うケースもあって絶対悪ではない。という考えに至りました。
型安全な実装は理想的ですが、そこに時間を使い過ぎて動くもの(サービス)が完成せずにビジネスにならないとなったら本末転倒だっていう考え方もありますね。そこにも焦点を当てても良いかなとも思いました。(視野を広げる的な)
とはいえ、any型は極力使わないようにしましょう。(自分に言い聞かせ・・・略)
Discussion