Печатание для функции резольвера graphql - PullRequest
0 голосов
/ 17 апреля 2020

Посмотрел примеры того, как написать тип для функций карри, но я все еще не могу соединить их.

Это функция, которую я имею для моего резольвера

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?

1 Ответ

2 голосов
/ 17 апреля 2020

Работа в процессе. Ожидание ответа от 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
...