TypeScript入門 第5回

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 = 123

unknownは、値をそのまま使うことができません。

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入門

コメント

タイトルとURLをコピーしました