【问题标题】:How to make Nestjs Typeorm's enum and protobuf's enum compatible?如何让 Nestjs Typeorm 的枚举和 protobuf 的枚举兼容?
【发布时间】:2023-04-01 04:40:02
【问题描述】:

我正在构建一个 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;

【问题讨论】:

    标签: enums microservices grpc nestjs proto


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多