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できない問題を解決する
1. デフォルトでアクセスするには、curl コマンドを使用します。 # curl -I http:...
前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...
Baiduの情報は多様すぎて目が回ります。心配しないでください。私はあなたのためにそれを体験しました...
Java開発キットjdkをダウンロードするJDK のダウンロード アドレスはhttp://www.o...
Linux オペレーティング システムは過去 20 年間にわたってデータ センターに革命をもたらし...
MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...
01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...
多くの友人が、Docker でプロジェクトを実行する方法をずっと知りたがっていました。今日は、自分の...
特定の期間内に特定の IP へのアクセス回数を制限する方法は、特に悪意のある DDOS 攻撃に直面し...
目次1. Consulクラスタをデプロイする1. 準備3. Consulクラスタを作成する4. 管理...
目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...
1. xshell6をインストールする2. サーバー接続を作成し、ユーザー名とパスワードを入力します...
目次概要1. DOM要素をアニメーション化する方法2. 現在のブラウザでサポートされている変換互換の...
Web ページの読み込み速度は、Web サイトの品質を評価するための重要な指標です。その理由は、ほと...
序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...