Могу ли я использовать подпись индекса для создания массива описаний для перечисления? - PullRequest
0 голосов
/ 26 февраля 2019

Предположим, у меня есть следующее перечисление:

export enum ApiRole {
    User = 1,
    SuperUser = 2,
    Restricted = 3,
}

Есть ли способ для меня легко создать массив, который я могу использовать эти значения перечисления для индексации, который будет возвращать строковое значение, которое я могу использовать в качествеописание?

Я пробовал это:

export const ApiRoleDescriptions: {[role: number]: string} = {
    1: 'Normal User',
    2: 'Super User',
    3: 'Restricted',
}

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

В конце дня я хотел бы иметь возможность написать что-то вроде ApiRoleDescriptions[ApiRole.User] прямо где-нибудь в моем коде.

РЕДАКТИРОВАТЬ: похоже, ответ на мой вопрос на момент написаниянет - по крайней мере, до этот PR объединен с машинописью, которая в настоящее время имеет веху 3.3 / 3.4.Тем не менее, я все еще ищу какой-то метод для достижения этой цели.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы могли бы объявить это так:

export const ApiRoleDescriptions: {[k in ApiRole]: string} = {
    1: 'Normal User',
    2: 'Super User',
    [ApiRole.Restricted]: 'Restricted',
}

in ApiRole будет гарантировать, что все ключи имеют известные значения перечисления и что все значения назначены.

Ссылки:

...