Вот мое определение перечисления

export enum CallerComponent {
  HOMEPAGE= 'homepage',
  DEFAULT = 'default'
}

 callerString = 'homepage';
 const caller: CallerComponent  = CallerComponent[callerString] //I'm getting undefined...

Все страницы, которые я нашел, говорят, что это путь. Я что-то упускаю?

Спасибо за помощь.

0
Richard77 15 Авг 2019 в 20:08

2 ответа

Лучший ответ

Вы можете попробовать что-то подобное:

const callerString: string = "homepage";
Object.keys(CallerComponent).forEach((key) => {
    const component: CallerComponent = CallerComponent[key as keyof typeof CallerComponent]
    console.log(component);
});

РЕДАКТИРОВАТЬ: поиск Google привел к тому же на вопрос отвечаем (с аналогичным решением тоже)

1
Sagar Chilukuri 15 Авг 2019 в 17:35

CallerComponent компилируется в словарь как {HOMEPAGE: "homepage", DEFAULT: "default"}. Вот почему CallerComponent ["homepage"] является undefined.

И "homepage" === CallerComponent.HOMEPAGE.

Итак, я в замешательстве. Чего ты хочешь достичь?

UPD: Ах, я понял. Я полагаю, вы пытались получить имя ключа по значению? Это работает с обычными перечислениями, а не с строковыми.

    export enum CallerComponent {
       HOMEPAGE,
       DEFAULT
    }


    const keyName = CallerComponent[CallerComponent.HOMEPAGE]; // HOMEPAGE

Дополнительная информация находится здесь: https://www.typescriptlang.org/docs /handbook/enums.html#reverse-mappings

Имейте в виду, что члены перечисления строк вообще не генерируют обратное отображение.

Поэтому, если вы действительно хотели бы изменить его по каким-то причинам, вы можете поиграть с базовым словарем, как вы это обычно делаете в простом javascript

0
Yozi 15 Авг 2019 в 17:29