👀
any型とunknown型【個人学習まとめ】
any型
型の制約なしに任意の値を受け入れる型。
any型の変数には型チェックが適用されない。
let anyValue1: any = 1; //any型
anyValue1 = "noTypeCheck"; //any型
anyValue1.oncheck(); //型チェックが行われないのでエラーにならない
コンパイル自体は問題なく通るが、実際に処理されるタイミングでエラーとなる。anyValue1.oncheck()において、以下のようなエラーが発生する。
value1.oncheck();
^
TypeError: value1.oncheck is not a function
unknown型
型の安全性を維持しながら未知の型の値を扱うことができる型
any型と同じように、どんな値でも代入できるようになるが、unknown型は変数の型チェックを無視するわけではない。
let unknownValue1: unknown = 1; //unknown型

number型などの型にunknown型を代入することはできない

しかし、unknown型にunknown型を代入することは可能(同一の型だから)
let unknownValue3: unknown = unknownValue1;
unknown型の算術演算子
算術演算子は許可されていない。
let sumValue1 = unknownValue1 + 5;
let sumValue2 = unknownValue1 * 5;


unknown型の変数の操作は限られているが、比較演算子は許可されている。(==,!=,===,!==,>,<,>=,<=,)
let unknownValue4: unknown = 'a';
let unknownValue5: unknown = 'a';
if (unknownValue4 === unknownValue5) {
console.log('OK');
} else {
console.log('NG');
}
>> OK
unknown型の変数が「一体何の型なのか」を確認し、確認がとれたらその変数を確認した型として扱うことができる。
Discussion