推論でTypeScriptに型を割り出させ、なぜ unknown が危険な any より優れているのかを理解しましょう。
このレッスンを Kodokon で開く良い知らせです。すべての変数に注釈を付ける必要はありません。型推論のおかげで、TypeScriptはあなたが与えた値から変数の型を割り出します。let city = "Lyon" と書くだけで十分です。TypeScriptは city が string であると分かり、まるであなたが注釈を付けたかのようにそれを守ります。
let city = "Lyon"; // inferred type: string
let count = 3; // inferred type: number
count = count + 1; // accepted
// city = 42; -> error: city is still a stringany 型は「何でも」を意味します。any の変数はすべての検証をすり抜けます。TypeScriptは何も検証せず、すべてを受け入れます。それはシートベルトを外すようなものです。コードはコンパイルできますが、エラーは実行時に戻ってきます。まさにTypeScriptが防ぐはずだったことです。
let data: any = "hello";
data = 42; // accepted without complaint
// Compiles, but crashes at runtime:
// data.toUpperCase() does not exist on a number!型が本当に不明な値(サーバーの応答、ユーザーの入力)には、unknown を選びましょう。any と同じように、あらゆる値を受け入れますが、使う前に(たとえば typeof で)型を確認することを強制します。したがって安全性は保たれたままです。
let value: unknown = "hello";
// console.log(value.toUpperCase()); -> rejected!
if (typeof value === "string") {
console.log(value.toUpperCase()); // "HELLO"
}