タイプスクリプトのキー値定数の管理
8754 ワード
アプリケーションにはドロップダウンメニューがあります.以下のようなフォームコントロールを想像しましょう
通常、各選択メニューの項目にはidとlabelがあります.IDは他のコンポーネント、サービス、またはサーバー側と通信する責任があります.ラベルはユーザのテキストを表示する責任があります.
このポストは、そのラベルのIDとマッピングを持つメニュー項目の定数を管理する方法を説明します.これは
タイプスクリプトでは、タプルは配列ですが、その長さと項目は固定されます.タプルを定義することができます
クリエイト
タプル型は、そのユニオン型に変換できます.この場合、あなたは得ることができます
行を加える
So
それを確認しましょう
タイプスクリプトは私たちを与える
ちなみに角度V 8.0 +はtypescript v 3と互換性があります.上記のデモアプリは以下の通りです
オブジェクトを定義する
通常、各選択メニューの項目にはidとlabelがあります.IDは他のコンポーネント、サービス、またはサーバー側と通信する責任があります.ラベルはユーザのテキストを表示する責任があります.
このポストは、そのラベルのIDとマッピングを持つメニュー項目の定数を管理する方法を説明します.これは
as const
v 3以降の特徴4 .コロのタプルを定義する
タイプスクリプトでは、タプルは配列ですが、その長さと項目は固定されます.タプルを定義することができます
as const
配列リテラルのディレクティブ.( as const
ディレクティブが必要ですクリエイト
colors.ts
と定義colorIDs
タプルexport const colorIDs = ['green', 'red', 'blue'] as const;
種類colorIDs
がstring[]
でも['green', 'red', 'blue']
. その長さはcolorIDs[0]
常に'green'
. これはタプルです!カライド型
タプル型は、そのユニオン型に変換できます.この場合、あなたは得ることができます
'green' | 'red' | 'blue'
タプルから入力します.行を加える
colors.ts
下記同様export const colorIDs = ['green', 'red', 'blue'] as const;
type ColorID = typeof colorIDs[number]; // === 'green' | 'red' | 'blue'
混乱?心配するな.それは魔法ではない.colorIDs[number]
は「数でアクセスできるフィールド」を意味する'green'
, 'red'
, or 'blue'
. So
typeof colorIDs[number]
ユニオンタイプ'green' | 'red' | 'blue'
. colorlabelマップを定義する
colorLabels
マップは以下のようなオブジェクトですconst colorLabels = {
blue: 'Blue',
green: 'Green',
red: 'Red',
};
だってcolorLabels
明示的な型がない場合でも、red
'sラベル.それを確認しましょう
colorLabels
すべての色の完全なラベルセット!ColorID
それを助けることができます.タイプスクリプトは私たちを与える
Record
キー値マップオブジェクトを定義する型.キーはColorID
値は文字列です.So colorLabels
's型Record<ColorID, string>
.export const colorIDs = ['green', 'red', 'blue'] as const;
type ColorID = typeof colorIDs[number];
export const colorLabels: Record<ColorID, string> = {
green: 'Green',
red: 'Red',
blue: 'Blue',
} as const;
ときに定義を逃したred
フィールド、TypeScriptコンパイラはオブジェクトにエラーをスローします.ちなみに角度V 8.0 +はtypescript v 3と互換性があります.上記のデモアプリは以下の通りです
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
import { colorIDs, colorLabels } from './colors';
@Component({
selector: 'app-root',
template: `
<label for="favoriteColor">Select Favorite Color: </label>
<select id="favoriteColor" [formControl]="favoriteColorControl">
<option *ngFor="let id of colorIDs" [ngValue]="id">
{{ colorLabels[id] }}
</option>
</select>
<div>Selected color ID: {{ favoriteColorControl.value }}</div>
`,
})
export class AppComponent {
readonly colorIDs = colorIDs;
readonly colorLabels = colorLabels;
readonly favoriteColorControl = new FormControl(this.colorIDs[0]);
}
結論
as const
配列をタプルにするtypeof colorIDs[number]
その項目のunion型を返すRecord<ColorID, string>
完全なフィールドを設定するため.Reference
この問題について(タイプスクリプトのキー値定数の管理), 我々は、より多くの情報をここで見つけました https://dev.to/angular/managing-key-value-constants-in-typescript-221gテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol