😇
TypeScriptのany型とunknown型の違いについて
type-challengesを解いており、他の回答コードを確認していると、人によってany型を使ったり、unknown型を使っているケースがあり、any型とunknown型の違いをまとめました。
any型
みなさんがよく使う任意の型の場合に使います。
unknown型
unknown型はTypeScript3.0から導入され、「型安全なany型」と言われています。
そのため、他の型の値に代入することができないだけでなく、値のプロパティや関数を参照することすらできません。
const unknown: unknown = 1;
const stringValue: string = unknown; // Type 'unknown' is not assignable to type 'string'.
const numberValue: number = unknown; // Type 'unknown' is not assignable to type 'number'.
const unknown: unknownString = "unknown";
console.log(unknownString.length); // 'unknownString' is of type 'unknown'.
const unknownObject: unknown = { property: "unknown" };
console.log(unknownObject.property); // 'unknownObject' is of type 'unknown'.
any型と違って、オブジェクトのプロパティすらアクセスできないんですね...
ちなみに、型の絞り込みをすれば、安全に操作することができるようです。
function isNumberArray(value: unknown): value is number[] {
if (!Array.isArray(value)) {
return false;
}
// 配列型として操作することが可能
return value.every((e) => typeof e === "number");
}
Discussion