let foo: any = 123;
console.log(foo.msg); // OK
let a_value1: unknown = foo; // OK
let a_value2: any = foo; // OK
let a_value3: string = foo; // OK
let bar: unknown = 222; // OK
console.log(bar.msg); // Error
let k_value1: unknown = bar; // OK
let K_value2: any = bar; // OK
let K_value3: string = bar; // Error
typescriptはanyに対して、何のタイプチェックはしません。
typescriptはunknownに対して、タイプチェックをする。barはunknownなので、msgにアクセスできるかどうかは分からなくて、一応アクセスを禁止とする。
unknownは anyとunknown以外の変数に代入できない
anyは どんな変数にも代入できる