【问题标题】:Usage of Enum in NestJs ProjectNestJs项目中枚举的使用
【发布时间】:2021-08-11 01:59:00
【问题描述】:

我试图在我的简单项目中使用 Enum。但出于某种原因,我不喜欢我调用枚举值的方式。示例在这里;我正在尝试创建我的自定义管道。

import { BadRequestException, PipeTransform } from '@nestjs/common';
import { TaskStatus } from '../task.model';
export class TaskStatusValidationPipe implements PipeTransform {
  readonly allowedStatus = [
    TaskStatus.OPEN,
    TaskStatus.IN_PROGRESS,
    TaskStatus.DONE,
  ];
  transform(value: any) {
    value = value.toUpperCase();
    if (!this.isStatusValid(value)) {
      throw new BadRequestException(`'${value}' is not valid status`);
    }
    return value;
  }
  private isStatusValid(status: any) {
    const idx = this.allowedStatus.indexOf(status);
    console.log(idx);
    return idx !== -1;
  }
}

我不喜欢那部分:

export class TaskStatusValidationPipe implements PipeTransform {
      readonly allowedStatus = [
        TaskStatus.OPEN,
        TaskStatus.IN_PROGRESS,
        TaskStatus.DONE,
      ];

有任何合乎逻辑的方法可以将我的有效状态分配到 allowedStatus 的数组中,但方法很简单,而不是从 TaskStatus 调用每个状态(例如,TaskStatus.OPEN强>...)?因为;对于大型项目,我可能在 TaskStatus 中有很多有效状态(例如“OPEN”、“DONE”、“DECLINED”...等)。

另外,它是 TaskStatus 枚举:

export enum TaskStatus {
  OPEN = 'OPEN',
  IN_PROGRESS = 'IN_PROGRESS',
  DONE = 'DONE',
}

谢谢,

【问题讨论】:

  • 我假设传入的value 应该是一个有效的枚举状态,对吗? 'OPEN''IN_PROGRESS''DONE' 等?
  • 是的,实际上我正在尝试更新某些对象的状态,所以我需要检查新状态是否有效?有效状态在我的枚举中,其中 TaskStatus。

标签: typescript enums nestjs


【解决方案1】:

如果传入的值应该已经是一个枚举值,为什么你不能做类似的事情

  private isStatusValid(status: keyof typeof TaskStatus) {
    const value = TaskStatus[status];
    return !!value;
  }

这应该返回 TaskStatus[status] 的 turthy 值(即,如果传入状态未映射到枚举值,则它是假的)

【讨论】:

  • 太棒了!我可以知道有什么方法可以用更少的代码调用数组中的枚举值我的意思是不像TaskStatus.OPEN那样调用?
  • 我在我的一个项目中这样做Enum[Enum[enumValue]],本质上是双重引用枚举。它是动态的,但你必须了解枚举是如何编译为 JS 才能看到它是如何正常工作的
  • 感谢您所有的好答案,我正在寻找类似的东西:export const new_arr = []; for (const value in TaskStatus) { new_arr.push(value); }
猜你喜欢
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多