首页 > 解决方案 > 输入 graphql 解析器函数

问题描述

查看了有关如何为柯里化函数编写类型的示例,但我仍然无法将两者联系起来。

这是我的解析器的功能

export default {
  Query: { 
    Name: getResolver(‘name’, ‘special’)
  }
}

function getResolver(n: string, type: string) {
   return (parent, args, ctx) => { ... }
}

我尝试这样做,但它不起作用。

type GetResolver = <t, t1, t2>() => (parent: t...) => ... 

type NameResolver = (t, t1, t2)=> ...
type GetResolver = (...) => NameResolver

我知道这些类型是错误的,但我不确定这里缺少什么。

我们如何为 graphql 解析器函数编写类型?

标签: typescriptgraphqlresolver

解决方案


工作正在进行中。等待OP的回复。

检查下面,我仍然没有得到全貌,需要更多输入。尽管如此,我还是根据您的评论整理了这段代码。

interface NameParent {}
interface NameArgs {}

const resolvers = {
  name: {
    special: function (parent: NameParent, args: NameArgs, ctx: any) {
      return 'string'
    },
    junk: function (parent: NameParent, args: NameArgs, ctx: any) {
      return 1
    }
  }
}

type ResolverType = keyof typeof resolvers

function getResolver<T extends ResolverType, K extends 'special' | 'junk'>(type: T, key: K) {
  return resolvers[type][key]
}

const specialNameResolver = getResolver('name', 'special')
// const specialNameResolver: (parent: NameParent, args: NameArgs, ctx: any) => string

const junkNameResolver = getResolver('name', 'junk')
// const junkNameResolver: (parent: NameParent, args: NameArgs, ctx: any) => number

推荐阅读