繁体   English   中英

Typescript 未检测到 Prisma 可选字段

[英]Typescript not detecting Prisma optional fields

我正在为我的 NestJS 项目创建种子文件,但 typescript 不会编译,因为它没有检测到某些字段在 Prisma Client 中是可选的。

这是 model 的示例,我遇到以下问题:

model Company {
  companyId Int           @id @default(autoincrement())
  name      String
  address   String?
  email     String? 
  isActive  Boolean       @default(true)
  managers  CompanyUser[]
  locations Location[]
}

然后我尝试制作一系列公司,如下所示:

import { Company, PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

const companies: Array<Company> = [
  {
    companyId: 1,
    name: "The Best Gym Ever",
  },
];

export const locationsSeed = async () => {
  companies.forEach(async (company) => {
    try {
      await prisma.company.create({
        data: company,
      });
    } catch (e) {
      console.error(e);
    }
  });
};

但是我收到以下错误: Type '{ companyId: number; name: string; }' is missing the following properties from type 'Company': address, email, isActivets(2739) Type '{ companyId: number; name: string; }' is missing the following properties from type 'Company': address, email, isActivets(2739)

由于这些字段是可选的或已经有默认选项,我该怎么做才能让它通过?

Prisma 为每个 model 生成多个变体类型,包括selectupdate arguments 的变体类型。

在您的情况下,您必须使用生成的类型CompanyCreateInput而不是Company

import { Prisma } from '@prisma/client';

const companies: Array<Prisma.CompanyCreateInput> = [
  {
    companyId: 1,
    name: "The Best Gym Ever",
  },
];

Prisma 为Company生成的类型包括所有属性,但允许可选字段为 null。

这就是 Prisma 保持代码清洁和类型安全的全部方式。 查看它们生成的类型,您会看到一种模式。 在你的情况下比较这些:

export type Company = {
  id: string
  optionalField: string | null
}
export type CompanyCreateInput = {
  id: string
  optionalField?: string | null
}
export type CompanyUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    optionalField?: NullableStringFieldUpdateOperationsInput | string | null
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM