🔣

TypeScriptのany型とunknown型について

2024/12/07に公開

TypeScriptは、型を指定することでコードの型安全性を高め、実行時エラーを減らせるメリットがあります。しかし、状況によってはどんな型でも受け入れたいときもあります。

そんな時に使われるのがany型とunknown型です。

概要

  • any型: あらゆる型の値を代入でき、型チェックを無効化します。
  • unknown型: あらゆる型の値を代入できますが、型チェックが行われます。

any型

any型を使うと、TypeScriptの型チェックを回避できます。

let value: any;
value = 123; 
value = 'hello'; 
value = { name: 'John' }; 
console.log(value.name); 

一見便利ですが、valueが本当にnameプロパティを持つとは限りません。any型は柔軟な反面、実行時エラーのリスクを高めます。

unknown型

unknown型は、型安全性を維持しつつ、未知の型の値を扱えます。

let value: unknown;
value = 123; 
value = 'hello'; 
value = { name: 'John' }; 

// 型ガードで型を絞り込む
if (typeof value === 'string') {
  console.log(value.toUpperCase()); //ここの処理は実行されない
}

unknown型は、型ガードなどで値の型を明確にするまでは、プロパティアクセスやメソッド呼び出しを制限します。これにより、型エラーを未然に防ぎます。

まとめ

any型とunknown型は、どちらもどんな型の値でも受け入れられますが、型安全性に違いがあります。
既存のJavaScriptコードをTypeScriptに移行する場合など、一時的に型チェックを回避したい場合はany型を、型安全性を重視する場合はunknown型を使用します。

Discussion