У CINCH я работаю над командой инвентаризации, и мы управляем всеми запасами автомобиля, отслеживая статус, местоположение и все виды других данных для тысяч автомобилей. У нас есть архитектура, ориентированная на события, что означает, что части нашего кода отвечают на определенные события, на которые мы подписываемся. У нас есть государственная машина/модель, которая содержит много логики для определения движущихся автомобилей из одного статуса к другому. Я пришел со следующим рисунком, когда я заметил хефты Если Условия в кодовой базе.
В этом примере я собираюсь использовать роботы как предмет, когда я пишу код, чтобы сделать с транспортными средствами каждый день! 🚗
Давайте представим, что мы хотим, чтобы функция, которая располагает роботом, но мы можем только утилизировать робот, если это статус? неисправен или поврежден Отказ Ниже мы устанавливаем наш Enum Robotstatus Чтобы перечислить наш возможный статус робота и Робот Интерфейс для создания формы нашего робота.
enum RobotStatus {
ready,
damaged,
faulty
}
interface Robot {
name: string
status: RobotStatus
}
function disposeRobot(robot: Robot): void {
if (robot.status === RobotStatus.damaged ||
robot.status === RobotStatus.faulty
) {
console.log('Disposing of robot...')
}
console.log('Robot in incorrect state to dispose...')
}
Это нормально. Но представьте, что если бы нам пришлось начать добавлять больше чеков для другого статуса. Давайте добавим еще для прекращено , мертвый , Старый , Ржавый и опасно Отказ
enum RobotStatus {
ready,
damaged,
faulty,
discontinued,
dead,
old,
rusty,
dangerous
}
interface Robot {
name: string
status: RobotStatus
}
function disposeRobot(robot: Robot): void {
if (robot.status === RobotStatus.damaged ||
robot.status === RobotStatus.faulty ||
robot.status === RobotStatus.discontinued ||
robot.status === RobotStatus.dead ||
robot.status === RobotStatus.old ||
robot.status === RobotStatus.rusty ||
robot.status === RobotStatus.dangerous ||
) {
console.log('Disposing of robot...')
}
console.log('Robot in incorrect state to dispose...')
}
Теперь, когда Если Блок становится коренастым и воняет 👃. Давайте создадим Enum Содержащие наши разрешенные одноразовые статусы.
enum DisposableStatus {
damaged,
faulty,
discontinued,
dead,
old,
rusty,
dangerous
}
JavaScript имеет в Оператор, который вернется True, если указанное свойство существует в указанном объекте.
prop in object
Это может убрать наши Если Блок сверху. Давайте использовать это …
function disposeRobot(robot: Robot): void {
if (robot.status in DisposableStatus) {
console.log('Disposing of robot...')
}
console.log('Robot in incorrect state to dispose...')
}
TypeScript скомпилируйте Enum в регулярный объект JavaScript, и эти свойства будут существовать во время выполнения 👍. Это гораздо более читаемо и легче переваривать для ваших будущих и других разработчиков.
Оригинал: “https://dev.to/andrewmcoupe/typescript-s-enum-javascript-s-in-34ca”