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できない問題を解決する
目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...
公式ドキュメント:したがって、mysql は次のように起動する必要があります。 docker run...
GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアルコード表...
主な機能は次のとおりです。製品情報を追加する製品情報を変更する単一の製品を削除する複数の製品を削除す...
今日、非常に奇妙な問題に遭遇しました。次のコードを見てください。 SimpleDateFormat ...
DockerにはCEとEEがあり、CE版はコミュニティ版(無料)、EE版はセキュリティを重視したエン...
最近、たくさんの人に改変してもらったフレームワークに取り組んでいます。毎日コードを見ていると目が回り...
ブラウザはおそらく私たちにとって最も馴染みのあるツールです。 Firefox、Opera、Safar...
目次設定を追加json 構成レイヤー構成の表示論理層の構成位置追跡をオンにする録音を開始開始座標を決...
1. CentOS Linuxにffmpegをインストールする1.ダウンロードして解凍する http...
この記事はWindows 10のシステム環境をベースに、Reactの学習と使用について説明しています...
この記事では、入力ボックスコンポーネントを手動で実装するための具体的なコードを参考までに紹介します。...
ScreenCloud は、必要だとは思わなかった素晴らしい小さなアプリです。デスクトップ Lin...
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...