Почему `id` игнорируется перечислением в Typescript?

Сегодня я столкнулся с проблемой в своем приложении, когда пытался условно отобразить элементы в зависимости от того, существует ли значение в перечислении. Вот упрощенный код:

enum Enum {
    'id',
    'name',
    'age'
}

['id', 'name', 'age'].forEach((val) => {
    console.log('in enum: ', !!Enum[val])
})

Это печатает,

"in enum: ",  false 
"in enum: ",  true 
"in enum: ",  true 

Я закончил тем, что сделал что-то вроде,

. . .
if (!!Enum[val] && val === 'id') {
    // code
}
. . .

Я что-то упускаю? Является ли id зарезервированным значением для перечислений?

Enum.id есть 0, а !!0 есть false. Это опечатка или... мозг-о?
jcalz 16.05.2022 22:15
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
1
1
32
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

id, name, age это НЕ values. Это KEYS для default valuses. Пример: enum Enum { 'id = 0','name = 1', 'age = 2' } - это значения по умолчанию. You by KEY просит VALUE

Например:

    enum Enum {
        'id' = 'a',
        'name' = 'b',
        'age' = 'c'
    }
    
    ['id', 'name', 'age'].forEach((val: any) => {
        console.log('in enum: ', Enum[val])
    })
    // result -> a, b, c
Ответ принят как подходящий

Выполняя !!Enum[val], вы тестируете значение перечисления, а не ключ перечисления:

console.log(!!0) //prints false
console.log(!!1) //prints true
console.log(!!2) //prints true

Ваш код должен выглядеть так:

['id', 'name', 'age'].forEach((val: any) => {
    console.log('in enum: ', (val in Enum))
})

Другие вопросы по теме