如何使Nestjs Typeorm 的enum 和protobuf 的enum 兼容?

How to make Nestjs Typeorm's enum and protobuf's enum compatible?

我正在构建一个 Nestjs GRPC 微服务应用程序。尝试将 TaskRequest 类型传递给具有 ICreateTask 接口

taskService.createTask 时出现以下错误
 Types of property 'taskStatus' are incompatible.
    Type 'TaskStatus' is not assignable to type 'TaskStatusEnum'.

如何使它们兼容? 我正在使用 protobufjs 包将 proto 文件编译成 ts 文件。

 "compile": "mkdir -p src/proto && pbjs -t static-module -w commonjs -o src/proto/task.proto.js lib/proto/task.proto && pbts -o src/proto/task.proto.d.ts src/proto/task.proto.js"

GRPC 原型

task.proto

 message TaskRequest {
    enum TaskStatus{
      DONE = 0;
      ACTIVE = 1;
    }

    TaskStatus taskStatus = 1;
    string dateCreated = 2;
    string dateUpdated = 3;
}

Typeorm

task.controller

@Controller()
export class TaskController {

  constructor(private taskService: taskService) {}

  async createPayment(taskRequest: TaskRequest): Promise<Task> {
   
    return this.taskService.createTask(taskRequest);
  }
}

task.service.ts


@Injectable()
export class TaskRepository {
  constructor(
    @InjectRepository(TaskRepository)
    private taskRepository: TaskRepository,
  ) {}

  async createTask(createTaskData: ICreateTask): Promise<Task> {
    const task = await this.taskRepository.createTask(
      createTaskData,
    );
    return task;
  }
}

task.entity.ts

export enum TaskStatusEnum {
  DONE = 'DONE',
  ACTIVE = 'ACTIVE'
}

@Entity()
export class Task extends BaseEntity {
  @PrimaryGeneratedColumn('uuid')
  taskId: string;

  @Column({
    type: 'enum',
    enum: TaskStatusEnum,
  })
  taskStatus: TaskStatusEnum;

  @Column({ type: 'timestamptz' })
  dateCreated: Date;

  @Column({ type: 'timestamptz' })
  dateUpdated: Date;
}

task.interface.ts

export class ICreateTask {
  @IsNotEmpty()
  @IsIn([TaskStatusEnum.DONE, TaskStatusEnum.ACTIVE])
  taskStatus: TaskStatusEnum;

  @IsNotEmpty()
  @IsDateString()
  dateCreated: string;

  @IsDateString()
  dateUpdated: string;

我最终使用了 task.proto.d.ts 的编译接口。