Как определить другой тип для удаленного свойства в Apollo? - PullRequest
1 голос
/ 30 октября 2019

Скажем, у меня есть следующий запрос:

foo {
  id
  bar
  baz @client
}

Я могу (на самом деле, я должен) создать преобразователь для генерирования локального свойства baz. Поэтому я контролирую его тип данных.

Теперь, что если я захочу изменить тип данных bar, удаленного свойства?

Я хочу сделать bar BigNumber вместострока. Представьте себе что-то вроде этого:

resolvers: {
  bar: {
    return new BigNumber(bar);
  },
  baz: { ... }
}

Возможно ли это?

1 Ответ

0 голосов
/ 15 ноября 2019

TLDR;В большинстве случаев вы не можете, поэтому добавьте немного избыточности, создав локальное свойство с правильным типом данных.


Основной запрос

Не работает ?

query Foo {
  id
  bar
  baz {
    id
  }
}

Если вы добавите распознаватель следующим образом:

export default {
  Foo: {
    bar: ({ bar }) => new BigNumber(bar),
  }
}

Это НЕ будет работать.

Базовый запрос с @ client

Работает 101

query Foo {
  id
  bar
  baz {
    id
  }
  qux @client
}

Просто добавив другое свойство, скажем, qux, которое имеет директиву @client, вы запустите определитель bar, определенный выше.

Сложный запрос с фрагментами

Не работает ?

Если переписать запрос следующим образом:

fragment Baz on Foo {
  id
}

query Foo {
  id
  bar
  qux @client
  ...Baz
}

Он больше не будет работать, даже с директивой @client.


Моя окружающая среда:

  • apollo-cache-inmemory@^1.6.3
  • apollo-client@^2.6.4
  • apollo-link-http@ ^ 1.5.16
  • graphql@^14.5.8
  • graphql-tag@^2.10.1

И я подключался к подграфу блокчейна, размещенному на thegraph.com . YMMV.

...