GraphQL Nexus — добавление пользовательского скалярного типа

GraphQL Nexus довольно новый продукт, и документации по нему, похоже, не хватает. Кроме того, отсутствуют и примеры. Из примера и из документа я пытаюсь добавить свой собственный скалярный тип NON-GraphQL. Я создал свой собственный скаляр, следуя примеру в документации, однако, когда я пытаюсь вызвать его в типе объекта, я получаю подчеркивание чтения. Что я делаю не так?


person JenniferG    schedule 08.03.2019    source источник


Ответы (2)


Чтобы решить эту проблему, я сделал следующее: 1. как только вы создадите свой собственный скалярный тип, например:

 #json.ts **FILE NAME MATTERS**
 export const JSONScalar = scalarType({
 name: "JSON",
 asNexusMethod: "json",
 description: "JSON scalar type",
 ...})

2. После того, как я назвал новый тип в отдельном объекте, мне пришлось добавить его над моим полем, чтобы он скомпилировался, у вас может не быть:

  //@ts-ignore
    t.topjson("data");

3. В моей схеме make я сначала добавил скалярный код:

  const schema = makeSchema({
    types: [JSONScalar, MyObject, BlahObject],

Имя файла очень важно, я думаю, именно так генерируется схема и ищет новый тип. Я также думаю, что вы должны сначала скомпилировать этот код в makeSchema, однако я не пытался изменить порядок, так как потратил много времени, пытаясь понять, как заставить работать мой собственный скалярный тип.

Это может быть понятно для более опытных разработчиков Nexus, однако я новичок, поэтому эти шаги ускользнули от меня.

Удачного кодирования!

person JenniferG    schedule 08.03.2019

Вы также можете сделать это:

t.field("data", {type: "JSON"});

Это отлично работает с TypeScript. И я бы хотел, чтобы у них были лучшие примеры и документация. Их примеры охватывают только самые тривиальные варианты использования. Я очень активно работаю с GraphQL, Prisma, Nexus и связанным с ними инструментом для работы с огромным набором данных. Так что я буквально сталкиваюсь с каждым существующим ограничением и отсутствием документации.

Но, увы, мы можем объединить наши знания здесь.

person Andrew Obrigewitsch    schedule 16.09.2019