NodeJS prisma:类型“string”不能赋给类型“never”

arknldoa  于 2023-03-17  发布在  Node.js
关注(0)|答案(2)|浏览(241)

THIS IS THE ACTUAL ERROR
"这是我的DTO"

export class CreateGradeDto {
  id: string;
  first_bimester?: number;
  second_bimester?: number;
  third_bimester?: number;
  fourth_bimester?: number;
  studentId: never;
  classId: string;
  createdAt: Date;
  updatedAt: Date;
}

"这是我的棱镜模型"

model Grades {
  id              String   @id @unique
  first_bimester  Float
  second_bimester Float
  third_bimester  Float
  fourth_bimester Float
  student         Student  @relation(fields: [studentId], references: [id])
  studentId       String   @unique
  class           Classes  @relation(fields: [classId], references: [id])
  classId         String   @unique
  createdAt       DateTime @default(now())
  updatedAt       DateTime @default(now())
}

"这是学生模式"

export class CreateStudentDto {
  id: string;
  name: string;
  cpf: string;
  createdAt: Date;
  updatedAt: Date;
}

(我在这个项目中使用了nestjs)
我不明白为什么我不能保存成绩,即使知道所有的时间的id的保存为字符串。我也检查了真实的的postgre数据库,他们保存为字符串。
有人能帮帮我吗?

qxgroojn

qxgroojn1#

我最初不知道如何创建一个记录并将其与现有记录相关联,我得到了与您相同的错误(number is not assignable to type never,因为我的ID是数字)。
然后我在这里找到了文档的相关部分:https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries/#connect-an-existing-record--它并不完全是最前面和最中心的。在你的例子中,语法应该是这样的:

prisma.grade.create({
    data: {
      student: { connect: { id: 'your-student-id' } },
      // ... rest of the grade data
    },
  });

因此,是的,您需要进行某种Map,将DTO中的关系字段转换为上面的语法。

// Create a copy of the dto data without the foreign key fields. Using lodash here for brevity
const gradeData = _.omit(createGradeDto, ['studentId', 'classId']);

prisma.grade.create({
    data: {
      ...gradeData,
      student: { connect: { id: createGradeDto.studentId } },
      class: { connect: { id: createGradeDto.classId } },
    },
  });
u7up0aaq

u7up0aaq2#

您需要做的就是在tsconfig的编译器中启用strict选项如下

{
     "compilerOptions": {
         "strict": true,
         ...
     },
     ...
}

相关问题