Как я могу использовать значения перечисления в качестве индекса массива - PullRequest
5 голосов
/ 08 июля 2019

Я пытаюсь использовать значение enum в качестве индекса массива, но это выдает ошибку.

export class Color {
    static RED = 0;
    static BLUE = 1;
    static GREEN = 2;
}

let x = ['warning', 'info', 'success'];
let anotherVariable = x[Color.RED]; <---- Error: Type 'Color' cannot be used as an index type.

Я пытался Number () и parseInt преобразовать в число, но это не работает.

Есть ли способ использовать значения Enum в качестве индекса?

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Для создания Enum мы создаем постоянный замороженный объект. Для разницы и почему см. Цитату ниже:

const применяется к привязкам («переменным»). Это создает неизменный привязка, т. е. вы не можете назначить новое значение привязке.

Object.freeze работает со значениями и, в частности, со значениями объектов. Он делает объект неизменным, то есть вы не можете изменить его свойства.

От: https://stackoverflow.com/a/33128023/9758920

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

// https://stackoverflow.com/questions/287903/what-is-the-preferred-syntax-for-defining-enums-in-javascript
const COLORS = Object.freeze({"RED":0, "BLUE":1, "GREEN":2})

let x = ['warning', 'info', 'success'];
let anotherVariable = x[COLORS.RED]; 

console.log(anotherVariable)

Также проверьте: https://stackoverflow.com/a/49309248/9758920

0 голосов
/ 08 июля 2019

Попробуйте это.

    let color = {
        RED : 0,
        BLUE : 1,
        GREEN : 2
    }

    module.exports = color

    let x = ['warning', 'info', 'success'];
    let anotherVariable = x[color.RED];
...