为什么 Prisma 在使用 TypeScript Spread 运算符时无法识别可选字段?

问题描述 投票:0回答:1

我正在使用 NestJS、Prisma 和 TypeScript,在创建新记录时遇到与 Prisma 架构中的可选字段相关的意外行为。当对可选字段使用 TypeScript 扩展运算符时,似乎会出现此问题。

model Room {
  id           Int          @id @default(autoincrement())
  name         String       @db.VarChar()
  roomType     String       @db.VarChar()
  propertyId   Int
  surfaceArea  Float
  // ... other fields
}

在架构中,surfaceArea 是可选字段。

export class CreateRoomBodyDto {
  // ... other fields
  @IsNumber()
  @IsOptional()
  surfaceArea?: number;
}

服务方式: 当我在 Prisma 的 create 方法中使用来自 DTO 的 roomDetails 的展开运算符时,Prisma 似乎忽略了可选的 surfaceArea 字段:

public async createRoom(roomData: CreateRoomBodyDto): Promise<CreateRoomResponse> {
  const { facilities, ...roomDetails } = roomData;

  const room = await this.prismaClient.room.create({
    data: { ...roomDetails }
  });

  // ... other logic
}

但是,当我在 create 方法中显式设置 surfaceArea: roomDetails.surfaceArea 时,它会按预期工作:

const room = await this.prismaClient.room.create({
  data: { ...roomDetails, surfaceArea: roomDetails.surfaceArea },
});

问题: 使用 TypeScript 扩展运算符时,为什么 Prisma 无法识别或正确处理可选的 surfaceArea 字段?是否有与 TypeScript 的类型推断或 Prisma 对可选字段的处理相关的特定原因?

我正在尝试了解此行为的根本原因,以便更好地使用 Prisma 和 TypeScript 构建 NestJS 中的数据处理。

javascript typescript nestjs javascript-objects prisma
1个回答
0
投票

在为 roomDetails 变量赋值时为其指定一个类型。这样 prisma 就可以处理类型了。

这样做,prisma 将正确处理其余字段,您将获得很好的自动完成功能。

© www.soinside.com 2019 - 2024. All rights reserved.