1. ホーム
  2. typescript

[解決済み] 'unknown' vs. 'any'

2022-03-22 11:02:52

質問

TypeScript 3.0の紹介 unknown という型があるそうです。

<ブロッククオート

unknownは、組み込み型になったため、予約型名になりました。 unknownの使用目的によっては、unknownを削除することもできます。 の宣言を完全に削除するか(新しく導入されたunknown型を優先する)、あるいは 他の名前に変更します。

との違いは何ですか? unknownany ? どのような場合に unknown オーバー any ?

どのように解決するのですか?

についての詳細を読むことができます。 unknown の中で PR または RC発表 , しかし、その要点は

[...] unknownは、anyの型安全な対応物である。しかし、unknownはそれ自身とany以外には型付けや制御フローに基づく絞り込みなしに割り当てることができません。同様に、最初にアサートするか、より具体的な型に絞り込まない限り、unknownに対していかなる操作も許されません。

いくつか例を挙げます。

let vAny: any = 10;          // We can assign anything to any
let vUnknown: unknown =  10; // We can assign anything to unknown just like any 


let s1: string = vAny;     // Any is assignable to anything 
let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion)

vAny.method();     // Ok; anything goes with any
vUnknown.method(); // Not ok; we don't know anything about this variable

推奨される使い方は

TypeScriptでは、最も能力の低い型を記述したい場合がよくある。これは「これはどんな値にもなり得るので、使う前に何らかのチェックをしなければならない」というシグナルを出したいAPIに有効である。これにより、ユーザーは返された値を安全にイントロスペクトすることを強いられる。