在Typescript中如何正确声明一个Mercurius解析器?

r7xajy2e  于 2022-12-27  发布在  TypeScript
关注(0)|答案(1)|浏览(99)

我有一个如下定义的自定义上下文,我要将其传递给Mercurius。

export interface Context {
  prisma: PrismaClient
}

const prisma = new PrismaClient()

export const context: Context = {
  prisma: prisma,
}

我的墨丘利定义如下。

app.register(mercurius, {
  schema,
  resolvers,
  graphiql: true,
  context: () => context /* This is the context object from above */,
})

我在定义接受上下文对象的resolvers时遇到困难。
根据Mercurius文档,resolver函数的第二个参数是在Graphql中传递给它的参数,第三个参数是上下文对象。但是,如果我定义了一个如下的resolver,我会从Typescript中得到错误。

const resolvers = {
    Query: {
      findFirst: async (_:any, args:any, ctx:Context) => {
          //...
      }
    }
  };

看起来Mercurius定义了上下文参数为MercurialContext类型的预期签名。在我的例子中,我的上下文不需要MercuriusContext中的额外信息,所以我不扩展它。所以,我被迫声明我的解析器如下。

const resolvers = {
    Query: {
      findFirst: async (_:any, args:any, ctx:any) => {
          //...Then in my code I am using 'ctx as Context' to force it into my object
      }
    }
  };

在Typescript中有什么优雅的方法来处理这个问题吗?

kgsdhlau

kgsdhlau1#

import type { IResolvers } from 'mercurius'

const resolvers: IResolvers = {
    Query: {
        findFirst: async (_:any, args:any, ctx:any) => {
        …
        }
    }
}

相关问题