如何在参数中键入 prisma 对象

how to type prisma objects in parameters

我有一个需要 prisma 模型/实例的函数

我如何实际键入此函数签名?我想要的是从 prisma.SOMETABLE.find 返回的类型,例如:

const item = await prisma.nftCollection.findFirst()

下面是简短的代码片段。


import { Prisma, PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

export class Buyer {

    async findColl() {
        const item = await prisma.nftCollection.findFirst()
        await this.buyItem(item)
    }

    // this is the param i want to type
    async buyItem(item: SOMETYPE) {
        clog.info('todo - buy', item)
    }
}

更多细节在这里: https://github.com/prisma/prisma/discussions/11737

@prisma/client(见node_modules/.prisma/client/index.d.ts) 您会找到您在 Prisma 模式中定义的模型类型。假设 Item 是您的模型。

因此您可以执行以下操作:

import { Prisma, PrismaClient, Item } from '@prisma/client';

const prisma = new PrismaClient();

export class Buyer {

  async findColl(): Promise<void> {
    const item = await prisma.nftCollection.findFirst();
    await this.buyItem(item);
  }

  async buyItem(item: Item | null): Promise<void> {
    clog.info('todo - buy', item);
  }
}

Item 是一致性类型(从 @prisma/client 导入)并且 buyItem 接受参数 Item | null 因为 findFirst returns 一个Itemnull。当然,您可以在调用 buyItem 之前检查 item 是否为 null,那么它将只是 item: Item.

如果您将选择集添加到 findFirst,您可能需要使用 Partial<Item>

编辑: 只需阅读您的 Github link。而不是 Item 使用 collection 也应该没问题。如果找到 type collection { ... }.

的定义,请检查 node_modules/.prisma/client/index.d.ts