anyとunknownの違いとどちらを使うべきかについて

概要

TypeScriptにはanyとunknownという型があります。
これらは型チェックを無効にするものですが、動作には大きく違いがあります。

anyとunknownの動作の違い

例えば以下の実装があったとします。 ( v5.3.3の環境で実行しています)

const un: unknown = 'hello'
const an: any = 'hello'

console.log(un.length) // 'un' is of type 'unknown'.
console.log(an.length) // 5

console.log(un.charAt(3)) // 'un' is of type 'unknown'.
console.log(an.charAt(3)) // "l" 

unknownは代入された変数が持つ型(今回はstring)のプロパティやメソッドを使用できませんが、anyは使うことができます。

逆に言えば、プロパティやメソッドを使う必要がない場合は、anyではなくunknownを使った方が意図しない使い方を縛れるというメリットがあります。
なのでanyである必要がないと判断した場合、unknownを使う方が良さそうです。