반응형
타이프스크립트에서 enum을 인덱스 키 유형으로 사용하는 방법
다음 예를 생각해 보겠습니다.
enum DialogType {
Options,
Help
}
class Dialog {
test() : string {
return "";
}
}
class Greeter {
openDialogs: { [key in DialogType]: Dialog | undefined } = {
0: undefined,
1: undefined
};
getDialog(t: DialogType) {
return this.openDialogs[t];
}
}
const greeter = new Greeter();
const d = greeter.getDialog(DialogType.Help);
if (d) document.write(d.test());
여기에는 3가지 문제/질문이 있습니다.
- 속성을 '| undefined'로 선언했는데도 이니셜라이저 리터럴에서 속성을 생략할 수 없는 이유
- 'DialogType'을 사용할 수 없는 이유'옵션'을 유형 키로 사용하고 하드코드된 번호를 사용해야 합니까?
- 'key: DialogType' 대신 'key in DialogType'을 사용해야 하는 이유는 무엇입니까? (또는 사용할 수 있습니까?)
|undefined
속성을 옵션으로 하는 것은 아닙니다.단, 다음과 같이 할 수 있습니다.undefined
, 제안할 것이 있습니다.|undefined
구성원은 선택 사항이지만 현재 구현되지 않았습니다.를 사용해야 합니다.?
끝나고]
모든 속성을 옵션으로 하다{ [key in DialogType]?: Dialog }
대화상자의 열거값을 키로 사용할 수 있지만 계산 속성이어야 합니다.
let openDialogs: { [key in DialogType]?: Dialog } = { [DialogType.Options]: undefined, };
{ [key: number or string]: Dialog }
는 인덱스 시그니처입니다.인덱스 서명은 로만 제한됩니다.number
또는string
키 타입(둘의 조합도 기능하지 않습니다).따라서 색인 서명을 사용하는 경우 다음을 기준으로 색인화할 수 있습니다.number
또는string
(이것만으로 제한할 수 없습니다).DialogType
여기서 사용하고 있는 개념은 맵 타입이라고 불립니다.매핑된 유형은 기본적으로 키 조합(이 경우 DialogType 열거형 멤버) 및 매핑 규칙 집합을 기반으로 새 유형을 생성합니다.위에서 작성한 유형은 기본적으로 다음과 같습니다.let o: { [DialogType.Help]?: Dialog; [DialogType.Options]?: Dialog; }
언급URL : https://stackoverflow.com/questions/52700659/how-to-use-enum-as-index-key-type-in-typescript
반응형
'programing' 카테고리의 다른 글
Angular에서 $location으로 리디렉션하는 방법.path를 $120으로 지정합니다.성공 후 콜백 (0) | 2023.04.02 |
---|---|
angular.js 뷰에서 사용하기 전에 스코프 변수가 로드될 때까지 기다립니다. (0) | 2023.04.02 |
워드프레스에서 쿼리를 선택하다 (0) | 2023.04.02 |
오라클에서 문자열을 여러 행으로 분할 (0) | 2023.04.02 |
jQuery - 이벤트가 시작된 후 온클릭 이벤트 청취자를 일시적으로 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.02 |