[英]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 生成多个变体类型,包括select
和update
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.