TypeScriptのanyとunknownの違いを簡潔に

anyとunknownにはどんな値も代入できます。これは同じです。

以下はどちらもコンパイルエラーになりません。

let a: any = 100;
let c: unknown = 100;

anyとunknownの違いはその変数を使うときにあります。

anyはどのような操作を行うことも可能ですが、unknownは型チェックをしないと操作できません。

以下の4行目では、c に 100 を加算しているので、 c は number であることを期待されますが、c は unknown なのでコンパイルエラーになります。

let a: any = 100;
let b = a + 100;
let c: unknown = 100;
let d = c + 100; //コンパイルエラーになる

以下のように型チェックをすることで unknown でも操作できるようになります。

let c: unknown = 100;
if(typeof c === 'number'){
    let d = c + 100;
}