【发布时间】: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