TypeScript перечисляет правильное использование логических или - PullRequest
0 голосов
/ 21 июня 2019

Допустим, у меня есть два перечисления Side и SideDecider, а в последнем у меня есть ключ side, который должен иметь значение Side, чтобы при использовании SideDecider.side я знал, что этозначение Side.

enum Side {
  left,
  right,
}

enum SideDecider {
  random,
  other,
  side, // = Side.left | Side.right is what I would like to use
}

// I am looking for a solution resolving something like the following to true
console.log(Side.left === SideDecider.side || Side.right === SideDecider.side)
// error: This condition will always return 'false' since the types 'Side.left' and 'SideDecider.side' have no overlap.

Как бы я правильно дал такое использование.Я пытаюсь неправильно использовать enums?Заранее благодарю за помощь.

Проверьте пример на TypeScript Playground

РЕДАКТИРОВАТЬ

Что я на самом делепопытка достичь - то же самое, но с использованием enums в качестве строк, поэтому я могу использовать их в качестве ключей для объектов, см. мой второй пример . Здесь , кто-то рекомендует использовать класс для строковых перечислений.Это лучшая практика?

enum Side {
  left = 'left',
  right = 'right',
}

enum SideDecider {
  random = 'random',
  other = 'other',
  side = Side.left | Side.right // Error: Computed values are not permitted in an enum with string valued members
}

const testObj = {
  left: 'something',
  right: 'something',
}

// (1) I am looking for a solution resolving something like the following to [true, true]
console.log([Side.left && SideDecider.side, Side.right && SideDecider.side])

// (2) Is there a way to use SideDecider.side to access keys in testObj?
console.log(testObj[SideDedicer.side])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...