🔣
TypeScriptのany型とunknown型について
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