Kodokon kodokon.com

推論、any、そして unknown

推論でTypeScriptに型を割り出させ、なぜ unknown が危険な any より優れているのかを理解しましょう。

8 分 · 3 問

このレッスンを Kodokon で開く

良い知らせです。すべての変数に注釈を付ける必要はありません。型推論のおかげで、TypeScriptはあなたが与えた値から変数の型を割り出します。let city = "Lyon" と書くだけで十分です。TypeScriptは citystring であると分かり、まるであなたが注釈を付けたかのようにそれを守ります。

TYPESCRIPT
let city = "Lyon"; // inferred type: string
let count = 3;     // inferred type: number

count = count + 1; // accepted
// city = 42; -> error: city is still a string
注釈はないのに、型はすべてそろっています。

any 型は「何でも」を意味します。any の変数はすべての検証をすり抜けます。TypeScriptは何も検証せず、すべてを受け入れます。それはシートベルトを外すようなものです。コードはコンパイルできますが、エラーは実行時に戻ってきます。まさにTypeScriptが防ぐはずだったことです。

TYPESCRIPT
let data: any = "hello";
data = 42; // accepted without complaint

// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!
any を使うと、TypeScriptは目をそらします。

型が本当に不明な値(サーバーの応答、ユーザーの入力)には、unknown を選びましょう。any と同じように、あらゆる値を受け入れますが、使う前に(たとえば typeof で)型を確認することを強制します。したがって安全性は保たれたままです。

TYPESCRIPT
let value: unknown = "hello";

// console.log(value.toUpperCase()); -> rejected!

if (typeof value === "string") {
  console.log(value.toUpperCase()); // "HELLO"
}
unknown は使う前に確認を要求します。

理解度チェック

このレッスンの要点をしっかり覚えているか確認しましょう。

  1. 型推論とは何ですか。
    • TypeScriptが初期値から型を割り出す
    • TypeScriptがプログラムから型を取り除く
    • TypeScriptが数値をテキストに変換する
  2. なぜ any はできる限り避けるべきなのですか。
    • プログラムを遅くするから
    • TypeScriptの検証を無効にするから
    • 言語によって禁止されているから
    • 数値だけに使えるから
  3. unknown 型の値を使う前に何をしなければなりませんか。
    • たとえば typeof でその型を確認する
    • それを any に変換する
    • それをもう一度宣言する