2 人のコーダーの給与を表すために 2 つのオブジェクトを使用します。 定数給与1 = { 基本給: 100_000, 年間ボーナス: 20_000 }; 定数給与2 = { 契約給与: 110_000 }; 次に、給与総額を取得する関数を作成します。 関数totalSalary(salaryObject: ???) { 合計を 0 にします。 for (const name in salaryObject) { 合計 += salaryObject[名前]; } 合計を返します。 } totalSalary(給与1); // => 120_000 合計給与(給与2); // => 110_000 あなたなら、文字列キーと数値を持つオブジェクトを受け入れるために 答えは、インデックス署名を使用することです。 次に、 1. インデックス署名とは何ですか?インデックス シグネチャの考え方は、キーと値の型のみがわかっている場合に、構造が不明なオブジェクトを型指定することです。 この関数はさまざまな構造の 関数totalSalary(salaryObject: { [キー: 文字列]: 数値 }) { 合計を 0 にします。 for (const name in salaryObject) { 合計 += salaryObject[名前]; } 合計を返します。 } totalSalary(給与1); // => 120_000 合計給与(給与2); // => 110_000
2. インデックス署名構文インデックス署名の構文は非常に簡単で、プロパティの構文に似ていますが、違いが 1 つあります。プロパティ名の代わりに、角括弧内にキー タイプを記述します: { [ 以下にインデックス署名の例をいくつか示します。 インターフェースStringByString { [キー: 文字列]: 文字列; } const heroesInBooks: StringByString = { 「ガンスリンガー」:「フロントエンドの知恵」 「ジャック・トーランス」:「王大志」 };
インターフェースオプション{ [キー: 文字列]: 文字列 | 数値 | ブール値; タイムアウト: 数値; } const オプション: オプション = { タイムアウト: 1000、 timeoutMessage: 'リクエストがタイムアウトしました!', ファイルアップロード: false }; 署名キーには、 3. インデックス署名に関する注意
3.1 存在しないプロパティインデックス署名が { 予想どおり、 インデックス署名は、キー タイプを値タイプにマップするだけであり、それ以上のものではありません。このマッピングが正しく行われないと、値の型が実際の実行時データ型から逸脱する可能性があります。 入力をより正確にするために、インデックス値は 3.2 文字列と数字キー数字の名前の辞書があるとします。 インターフェース NumbersNames { [キー: 文字列]: 文字列 } 定数名: NumbersNames = { '1': '1'、 '2': '2'、 '3': '3'、 // ... }; いいえ、正常に動作します。 4. インデックス署名とレコード<キー、タイプ> const object1: Record<string, string> = { prop: 'Value' }; // OK const object2: { [key: string]: string } = { prop: 'Value' }; // OK それで質問は... ご存知のとおり、インデックス署名はキー タイプとして インデックス署名はキーに関して汎用的です。 しかし、 type Salary = Record<'yearlySalary'|'yearlyBonus', number> const salary1: 給与 = { '年俸': 120_000, '年間ボーナス': 10_000 }; // わかりました
汎用オブジェクトにはインデックス署名 (キーが文字列型であるなど) を注釈として付けることをお勧めします。ただし、キーが事前にわかっている場合は、 要約: 扱っているオブジェクトの構造はわからないが、可能なキーと値の型がわかっている場合は、インデックス署名が必要になります。 インデックス署名は、角括弧で囲まれたインデックス名とその型、それに続くコロンと値の型で構成されます: これで、TypeScript インデックス シグネチャの理解に関するこの記事は終了です。TypeScript インデックス シグネチャに関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Mysql はテーブル内の古いデータを定期的にクリアし、いくつかのデータを保持します (推奨)
>>: MacでDockerがホストマシンにpingできない問題を解決する
上図のように、パディング値は時計回り(右上、右下)の複合属性であり、パディングの内側の余白がボックス...
Docker の人気と成熟に伴い、Docker は徐々にプロジェクトをデプロイするための第一の選択肢...
1. docker imagesを使用して、このマシン上のすべてのイメージファイルを表示します。 2...
序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...
目次概要機能性と読みやすさ空白括弧セミコロンインデント身元大文字と小文字を区別予約キーワード概要すべ...
この記事の例では、参考までに簡単な計算機を実装するためのjsの具体的なコードを共有しています。具体的...
DCL (データ制御言語): データベースのアクセス権とセキュリティ レベルを定義し、ユーザーを作成...
目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...
目次 はじめに 同期 非同期とブロッキング JavaScript のノンブロッキング コールバック ...
フロントエンド Web エンジニアとして、ページ効果を作成するときに次の現象に遭遇したことがあるはず...
需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...
HTML では、<、>、& などは特別な意味を持ち (<、> はリン...
CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...
この記事では、ウィンドウ表示効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
実験コードは次のとおりです。 </head> <body> <div ...