TypeScript에서 키-값 상수 관리
9076 단어 angulartypescript
일반적으로 각 선택 메뉴의 항목에는 ID와 레이블이 있습니다. ID는 다른 구성 요소, 서비스 또는 서버 측과의 통신을 담당합니다. 레이블은 사용자에게 텍스트를 표시하는 역할을 합니다.
이 게시물은 레이블에 대한 ID와 매핑이 있는 메뉴 항목에 대한 상수를 관리하는 방법에 대해 설명합니다. v3.4부터 도입된 TypeScript의
as const
기능을 사용합니다.colorID 튜플 정의
TypeScript에서 튜플은 배열이지만 길이와 항목은 고정되어 있습니다. 배열 리터럴에서
as const
지시문을 사용하여 튜플을 정의할 수 있습니다. ( as const
지시문에는 TypeScript 3.4 이상이 필요함)다음과 같이 튜플을 만들고
colors.ts
정의합니다colorIDs
.export const colorIDs = ['green', 'red', 'blue'] as const;
colorIDs
의 유형은 string[]
가 아니라 ['green', 'red', 'blue']
입니다. 길이는 절대적으로 3이고 colorIDs[0]
는 항상 'green'
입니다. 이것은 튜플입니다!ColorID 유형 추출
Tuple 유형은 해당 항목의 공용체 유형으로 변환될 수 있습니다. 이 경우 튜플에서
'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'
또는 'blue'
입니다.따라서
typeof colorIDs[number]
는 합집합 유형 'green' | 'red' | 'blue'
이 됩니다.colorLabels 맵 정의
colorLabels
지도는 아래와 같은 객체입니다.const colorLabels = {
blue: 'Blue',
green: 'Green',
red: 'Red',
};
colorLabels
에는 명시적인 유형이 없기 때문에 red
의 레이블을 정의하지 않아도 알 수 없습니다.colorLabels
에 모든 색상의 완전한 레이블 세트가 있는지 확인하십시오! ColorID
가 도움이 될 수 있습니다.TypeScript는 키-값 맵 개체를 정의하는 유형
Record
을 제공합니다. 키는 ColorID
이고 값은 문자열입니다. 따라서 colorLabels
의 유형은 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 컴파일러는 개체에 오류를 발생시킵니다.그런데 Angular v8.0+는 TypeScript v3.4와 호환됩니다. 위의 데모 앱은 다음과 같습니다.
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]
항목의 통합 유형을 반환합니다Record<ColorID, string>
로 개체를 정의합니다. Reference
이 문제에 관하여(TypeScript에서 키-값 상수 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/angular/managing-key-value-constants-in-typescript-221g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)