ホームページ >ウェブフロントエンド >jsチュートリアル >TypeScriptにおけるunknownとanyの違いについて話しましょう

TypeScriptにおけるunknownとanyの違いについて話しましょう

青灯夜游
青灯夜游転載
2021-10-27 11:14:492217ブラウズ

この記事は、TypeScript での unknown と any を比較し、unknown と any の違いについて説明するのに役立ちます。皆様のお役に立てれば幸いです。

TypeScriptにおけるunknownとanyの違いについて話しましょう

any の変数は任意の値に代入できることがわかっています。

let myVar: any = 0;
myVar = '1';
myVar = false;

TypeScript このガイドでは、any の使用を推奨していません。これを使用すると、型制限が失われるためです。また、型制限の必要性も理由の 1 つです。私たちが TypeScript を選択する理由は、少し反対です。

TypeScript (3.0 以降) は、any に似た特別な型 unknown も提供します。 unknown 型変数に任意の値を代入することもできます。

let myVar: unknown = 0;
myVar = '1';
myVar = false;

ここで質問があります。anyunknown## の違いは何ですか。 # ?

1. 不明と任意

unknownany の違いをよりよく理解するために、まず次のように書いてみましょう。呼び出したい唯一の引数を持つ関数。

invokeAnything() の唯一のパラメータを any タイプ

function invokeAnything(callback: any) {
  callback();
}

invokeAnything(1); // throws "TypeError: callback is not a function"

に設定します。これは、

callback パラメータが任意のものであるためです。 type なので、ステートメント callback() は型エラーを引き起こしません。 any 型の変数を使用すると何でもできます。

しかし、実行するとランタイム エラーがスローされます:

TypeError: callback is not a function1 は数値であり、関数として呼び出すことはできません。TypeScript は、このエラーを回避するためにコードを保護しません。

これにより、

invokeAnything() 関数が許可されるだけではありません任意のタイプのパラメーターを受け入れるだけでなく、上記のエラーを防ぐためにこのパラメーターの型チェックを強制するにはどうすればよいですか?

unknown ビッグブラザーにフィールドをコントロールしてください。

any と同様、unknown 変数は任意の値を受け入れます。ただし、TypeScript は、unknown 変数を使用しようとすると型チェックを強制します。これが私たちが望んでいることではないでしょうか?

function invokeAnything(callback: unknown) {
  callback();
  // Object is of type 'unknown'
}

invokeAnything(1);

callback パラメータの型は unknown であるため、ステートメント callback() には型エラーがあります: Object isタイプ「不明」any とは対照的に、TypeScript は関数ではない可能性のあるものを呼び出すことから保護します。

unknown の変数を使用する前に、型チェックを実行する必要があります。この例では、callback が関数型であるかどうかを確認するだけです。

function invokeAnything(callback: unknown) {
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1);

2. 未知と任意のメンタルモデル

正直に言うと、私が学んでいるときは、

未知##を理解するのが難しかったです。 #。どちらの型も任意の値を受け入れるため、any とどのように異なりますか。2 つの違いを理解するのに役立つルールを次に示します。は

unknown

型に割り当てられていますが、型チェックまたは型アサーションを行う前に

unknown
    に対して操作を実行することはできません。
  • Can assign anything to any タイプでは、any
  • タイプで任意の操作を実行することもできます。
  • 上の例は、unknown と `any の類似点と相違点を示しているだけです。 。

unknown 例:

function invokeAnything(callback: unknown) {
  // 可以将任何东西赋给 `unknown` 类型,
  // 但在进行类型检查或类型断言之前,不能对 `unknown` 进行操作
  if (typeof callback === 'function') {
    callback();
  }
}

invokeAnything(1); // You can assign anything to `unknown` type

Type check

typeof callback === 'function'callback

がfunction の場合、それを呼び出すことができます。

any 例:

function invokeAnything(callback: any) {
  // 可以对 `any` 类型执行任何操作
  callback();
}

invokeAnything(1); // 可以把任何东西分配给`any`类型

callbackany

の場合、TypeScript は

callback() # を強制しません## ステートメントを使用して型チェックを実行します。 3. 概要

unknown

any は、任意の値に対応できる 2 つの特別な型です。

より安全な型を提供するため、any の代わりに unknown を使用することをお勧めします。

unknown

を操作したい場合は、次のようにする必要があります。 Type アサーションを使用するか、特定のタイプに絞り込みます。 プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !

以上がTypeScriptにおけるunknownとanyの違いについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。