👀

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