はじめに
TypeScript
は一通り学習し業務でも触れていたのですが深く理解しているかというとそうではないので復習のつもりで記事を投稿いたします。
まずは any
と unknown
の違いについて。
any
, unknown
の違い
どちらも型に縛られることなく値を代入可能です。
ただし、unknown
型の変数については、
プロパティ参照や関数実行する前に型チェックを行わないとコンパイルは通りません。
なので、any
型を利用するより安全なコードを書き、実行時エラーを未然に防ぐことができます。
sample01.ts
const a: unknown = 'Who am I?';
const b: any = 'I am any.';
console.log(a.toUpperCase());
console.log(b.toUpperCase());
unknown.ts:5:15 - error TS2339: Property 'toUpperCase' does not exist on type 'unknown'.
5 console.log(a.toUpperCase());
~~~~~~~~~~~
Found 1 error in unknown.ts:5
sample02.ts
const a: unknown = 'Who am I?';
const b: any = 'I am any.';
// 型安全であることを確保した上で関数実行
if (typeof a === 'string') {
console.log(a.toUpperCase());
}
// any型は型のチェックを入れなくてもコンパイルエラーにならない
console.log(b.toUpperCase());