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できない問題を解決する
Linux の scp コマンド (Windows では scp は使用できません) と、mysql...
初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...
パブリック関数 json_product_list($where, $order){ グローバル ...
十分に最適化されていない、またはパフォーマンスが極端に低い SQL ステートメントに直面した場合、通...
質問コードにはプロンプトがありません: RN 開発に不慣れな、フロントエンド以外の学生の多くは、「ど...
目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...
これを実現するには、次のコードを追加するだけです。方法1: メタを使用する使用方法: <Met...
目次1. はじめに2. データを消去するいくつかの方法2.1 ref() の使用2.2 スライスの使...
目次1 はじめに2 トリガーの紹介3 トリガーを作成する4 トリガーを表示5. トリガーの削除6 結...
HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...
背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...
プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、pr...
今日は、CSS を使用してクールな画像カルーセル コンポーネントを作成する方法を学びます。その原理は...
Crontab は定期的な実行を設定するために使用されるコマンドです。そのデーモン プロセスは cr...
<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...