并行使用 prisma 和 typescript 模型
Posted
技术标签:
【中文标题】并行使用 prisma 和 typescript 模型【英文标题】:Using prisma and typescript models in parallel 【发布时间】:2021-10-01 20:36:09 【问题描述】:我经常在我的打字稿模型中使用const assertions:
const ListingVehicleTypes = [
"car",
"motorcycle",
"caravan",
"camper_trailer"
] as const;
interface LISTING
vehicleType: typeof ListingVehicleTypes[number];
...
因此,LISTING["vehicleType"]
被正确推断为"car" | "motorcycle" | "caravan" | "camper_trailer"
。
我可以在我的 schema.prisma
中表达这些限制吗? 在 *.prisma
文件中既不允许导入也不允许 typescript 实用程序:
model Listing
vehicleType typeof ListingVehicleTypes[number] // no-go
如果没有,当执行 prisma 驱动的数据库查询时,有没有办法用类型更安全的 typescript 模型“丰富”prisma 模型?
我总是可以将查询正文和响应转换为any
,但有没有更简洁的方法?
对于它的价值,我使用的是mongodb
provider——但我不认为提供者在这里发挥作用。
【问题讨论】:
【参考方案1】:我建议为此使用enum。但请务必检查 here 的底层数据库是否支持枚举。
在 Prisma 架构中,
model Listing
vehicleType VehicleType @default(car)
enum VehicleType
car
motorcycle
caravan
camper_trailer
然后在您的打字稿代码中,您可以按如下方式使用它。
import Listing from "@prisma/client";
type VehicleTypes = Listing["vehicleType"];
【讨论】:
这是朝着正确方向迈出的一步,谢谢!但是,type VehicleTypes
就是这样——type
。而且我使用 const 断言在我的类型声明之外保留数组的可迭代质量(尤其是在生成前端或通过yup 模式进行验证时)。换句话说,我不能迭代 prisma 生成的类型——Object.keys(Listing['vehicleType'])
当然会抛出 'Listing' only refers to a type, but is being used as a value here.
我想这就是 prisma 和 ts 模型之间的联系结束的地方。
如果您需要从类型 ts-transformer-keys 获取可迭代数组可能会有所帮助。不过我没用过,所以不知道有什么限制。以上是关于并行使用 prisma 和 typescript 模型的主要内容,如果未能解决你的问题,请参考以下文章