序文any 型の変数には任意の値を割り当てることができることがわかっています。 myVar: any = 0 とします。 私の変数 = '1'; 変数 = false; TypeScript ガイドラインでは、 any を使用すると型の制約が失われるため、 any の使用は推奨されていません。型制約の必要性は TypeScript を選択した理由の 1 つなので、これは少し矛盾しています。 TypeScript (バージョン 3.0 以降) では、any に似た unknown と呼ばれる特殊な型も提供されます。 未知の型の変数に任意の値を割り当てることもできます。 myVar: 不明 = 0 とします。 私の変数 = '1'; 変数 = false; ここで疑問が生じます。any と unknown の違いは何でしょうか? 1. 不明 vs 任意unknown と any の違いをよりよく理解するために、まず、唯一の引数で呼び出す関数を記述してみましょう。 invokeAnything() の唯一のパラメータを any 型に設定します。 関数invokeAnything(コールバック: any) { 折り返し電話(); } invokeAnything(1); // "TypeError: コールバックは関数ではありません" をスローします コールバック パラメータは任意の型にすることができるため、ステートメント callback() は TypeError をトリガーしません。 any 型の変数を使えば何でもできます。 しかし、実行すると実行時エラーが発生します: TypeError: callback is not a function. 1 は数値なので、関数として呼び出すことはできません。TypeScript はこのエラーからコードを保護しません。 では、invokeAnything() 関数が任意のタイプのパラメータを受け入れられるようにしながら、パラメータの型チェックを強制して上記のエラーを防ぐにはどうすればよいでしょうか? 未知の兄弟を招待して状況をコントロールしてください。 any と同様に、unknown 変数は任意の値を受け入れます。ただし、TypeScript では、不明な変数を使用しようとすると型チェックが強制されます。これが私たちが望んでいることではないでしょうか? 関数invokeAnything(コールバック: 不明) { 折り返し電話(); // オブジェクトは 'unknown' 型です } 何でも呼び出します(1); コールバック パラメータの型が不明であるため、ステートメント callback() に型エラーが発生します: オブジェクトの型は 'unknown' です。 いずれの場合も、TypeScript は関数ではない可能性のあるものを呼び出すことから私たちを保護します。 不明な型の変数を使用する前に、型チェックを実行する必要があります。この場合、コールバックが関数型であるかどうかを確認するだけです。 関数invokeAnything(コールバック: 不明) { if (typeof コールバック === 'function') { 折り返し電話(); } } 何でも呼び出します(1); 2. 未知とあらゆるもののメンタルモデル正直に言うと、勉強していたときは、分からないことを理解するのに苦労しました。どちらの型も任意の値を受け入れるのに、any とどう違うのでしょうか? 両者の違いを理解するのに役立ったルールは次のとおりです。
上記の例は、unknown と any の類似点と相違点を示しています。 不明 例: 関数invokeAnything(コールバック: 不明) { // `unknown` 型には何でも代入できます。 // ただし、型チェックや型アサーションを行う前に `unknown` を操作することはできません if (typeof callback === 'function') { 折り返し電話(); } } invokeAnything(1); // `unknown` 型には何でも代入できる 型チェック typeof callback === 'function' は、コールバックが関数であるかどうかをチェックします。関数である場合は、呼び出すことができます。 例: 関数invokeAnything(コールバック: any) { // `any` 型 callback() に対して任意の操作を実行できます。 } invokeAnything(1); // `any` 型には何でも代入できる callback が any の場合、TypeScript は callback() ステートメントに対して型チェックを強制しません。 3. まとめUnknown と any は、任意の値を保持できる 2 つの特殊な型です。 型の安全性を高めるため、any ではなく unknown を使用することをお勧めします。unknown を操作する場合は、型アサーションを使用するか、特定の型に絞り込む必要があります。 ~~ 終わり。私は小志です。私の彼女は教育・研修業界で働いています。最近彼女の給料が少し低いので、もっと働いてもっとお金を稼ぐつもりです。 編集中にどのようなバグが存在するかはリアルタイムで知る方法がありません。後からこれらのバグを解決するために、ログのデバッグに多くの時間を費やしました。ちなみに、便利なBUG監視ツールFundebugをお勧めしたいと思います。 原文: dmitripvlutin.com/typescript-… 要約するTypeScript における unknown と any の違いについての記事はこれで終わりです。TypeScript における unknown と any の違いについてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
>>: Tomcat の静的ページ (html) で中国語の文字化けが発生する問題の究極の解決策
2 列レイアウトはプロジェクトでよく使用されます。この効果を実現する方法はたくさんあります。 しかし...
1. GraphVis 公式サイトにアクセスして、対応する js をダウンロードします。js の新し...
目次1. 索引1.1 コンセプト1.2 機能1.3 索引作成の原則1.3.1 ディスクアクセス回数を...
目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...
Nginx は複数のサーバーをリバース プロキシします。つまり、nginx に異なるリクエストを送信...
1.ロックしますか? 1.1 ロックとは何ですか?ロックの本当の意味は、鍵またはコードで開くことがで...
目次序文1. クロスドメインの問題はなぜ発生するのでしょうか? 2. 解決策クロスオリジンリソース共...
重要な注意: この記事を読む前に、Docker コンテナに関する知識と、一般的な Docker 操作...
かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...
目次序文時間型を保存するのに文字列を使用しないでくださいMySQL の日付型日時タイムスタンプTIM...
今日は、CSS3 の transition-delay 属性のデフォルト値 0 に単位がないのは無効...
この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...
Netease Kanyouxi公式サイト(http://kanyouxi.163.com/)(棚...
2つの目的のためのリソースの結合と圧縮httpリクエストの数を減らす要求されたリソースのサイズを縮小...
1. トランザクションとは何ですか?データベース トランザクション (略称: トランザクション) は...