GraphQL Nexus довольно новый продукт, и документации по нему, похоже, не хватает. Кроме того, отсутствуют и примеры. Из примера и из документа я пытаюсь добавить свой собственный скалярный тип NON-GraphQL. Я создал свой собственный скаляр, следуя примеру в документации, однако, когда я пытаюсь вызвать его в типе объекта, я получаю подчеркивание чтения. Что я делаю не так?
GraphQL Nexus — добавление пользовательского скалярного типа
Ответы (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, однако я новичок, поэтому эти шаги ускользнули от меня.
Удачного кодирования!
Вы также можете сделать это:
t.field("data", {type: "JSON"});
Это отлично работает с TypeScript. И я бы хотел, чтобы у них были лучшие примеры и документация. Их примеры охватывают только самые тривиальные варианты использования. Я очень активно работаю с GraphQL, Prisma, Nexus и связанным с ними инструментом для работы с огромным набором данных. Так что я буквально сталкиваюсь с каждым существующим ограничением и отсутствием документации.
Но, увы, мы можем объединить наши знания здесь.