はじめに
皆さんTypeScriptのany型
についてどの程度知っていますか?
私は開発にTypeScriptをよく使用します。
しかし、一般的に「any型を使用することは敗北である!」
と言われることが多いので、正直なところany型
には良い印象を持っていません。
実際、私はエンジニアとして、日々の開発業務においてany型
を使用することを極力避けています。
インターフェースの定義や型のチェックには常に注意を払い、正確な型付けを心掛けています。
any型
を見つけた際には、適切な型を特定するために尽力しています。
しかし、今までany型
について深く調査したことはありませんでした。そこで、今回any型
について改めて調査し、得られた知見を以下にまとめます。
any型とは
TypeScriptはしばしばJavaScriptのスーパーセットと表現されます。
TypeScriptには独自の概念や型がいくつか存在し、その中に「any型
」があります。簡単に言うと、any型
は型チェックを無効にする特別な型です。
TypeScriptは、コンパイルに成功することでJavaScriptコードに変換されます。
しかし、any型
を使用すると、その変数に対する型チェックが行われなくなります。
結果として、基本的にコンパイルエラーが発生しない状況が生じます。
any型
を使用することは、型安全性を確保するというTypeScriptの主要な恩恵を受けることを放棄するといえるでしょう。
型安全性は、実行時エラーのリスクを減らし、開発者によるコードの理解を促進する重要な要素です。
したがって、any型
を使用することは、型安全性の確保することを放棄し、JavaScriptのような動的型付けの振る舞いに戻ることを意味します。
『プロを目指すためのTypeScript入門』という書籍では、TypeScriptにおける「any型
」について、以下のように述べています
TypeScriptで最も危険な機能として位置付けられている。
any型
を使用は非常に困難であり、避けるべきである。
これはany型
がTypeScriptの型システムにおいて特異な位置を占めていることを示しています。
any型
を使用することは、型安全性を損なう可能性が高く、結果としてデバッグや保守が困難になる可能性があります。
そのため、多くのTypeScript開発者は、必要な場合を除いてany型
を使用を避けることを推奨しています。
また、私は開発にVSCodeを使用していますが、any型
を使うと型の補完機能が働かず、オブジェクトのプロパティが確認できないため、都度コンソール上にログを出力して確認をしています。 こういった作業が頻繁に発生する場合、作業効率化の低下を招くと感じています。
any型
を使用するデメリット
- TypeScriptの主要な利点である型安全性が損失、実行時エラーのリスクの増加
- VSCodeなどのIDE上で型情報の補完が不可能なため開発効率の低下、リファクタリングやデバッグが困難になる
ではどういった場合にany型
を使用することが有効なのでしょうか?
any型
を使用するメリット
- 型が不明確な外部ライブラリやAPIの利用時
any型は型システムの制約を無効化することができるため、型情報がない外部ライブラリやAPIからのデータを扱う際に柔軟な対応が可能になる。これにより、既存のJavaScriptライブラリやAPIとの互換性を保ちつつ、TypeScriptの恩恵を享受することができる
- JavaScriptからTypeScriptへのコード移行時
既存のJavaScriptコードをTypeScriptに移行する際には有効である。
型チェックを無効化することにより、即座にTypeScriptの利点を享受しつつ、段階的に型を厳格化していくことができ、大規模なコードベースの移行を容易することができる。
まとめ
ここまでany型を使用することのデメリット、メリットをまとめました。
any型はほとんどのケースでは、使用によるデメリットが大きいが一部のケースでは有効なアプローチであることがわかりました。
今後も基本的にany型
を使用しないという、姿勢は変わりませんが、本当に必要な時に適切に使用するための知識を身に着けて置くことは非常に重要だと感じました。
any型
だけでなく、実務で普段から使用している技術についても、理解度を見直し、深く理解することの重要性を再認識しました。
TypeScriptは今後も業務で使い続ける予定なので、気になる箇所があれば都度調査し、まとめていきます。
参考文献