programing

타이프스크립트에서 enum을 인덱스 키 유형으로 사용하는 방법

codeshow 2023. 4. 2. 11:44
반응형

타이프스크립트에서 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가지 문제/질문이 있습니다.

  1. 속성을 '| undefined'로 선언했는데도 이니셜라이저 리터럴에서 속성을 생략할 수 없는 이유
  2. 'DialogType'을 사용할 수 없는 이유'옵션'을 유형 키로 사용하고 하드코드된 번호를 사용해야 합니까?
  3. 'key: DialogType' 대신 'key in DialogType'을 사용해야 하는 이유는 무엇입니까? (또는 사용할 수 있습니까?)
  1. |undefined속성을 옵션으로 하는 것은 아닙니다.단, 다음과 같이 할 수 있습니다.undefined, 제안할 것이 있습니다.|undefined구성원은 선택 사항이지만 현재 구현되지 않았습니다.를 사용해야 합니다.?끝나고]모든 속성을 옵션으로 하다

    { [key in DialogType]?: Dialog }
    
  2. 대화상자의 열거값을 키로 사용할 수 있지만 계산 속성이어야 합니다.

    let openDialogs: { [key in DialogType]?: Dialog } = {
        [DialogType.Options]: undefined,
    };
    
  3. { [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

반응형