首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自定义使用Hasura graphql架构时生成的graphql代码生成器字段的类型

如何自定义使用Hasura graphql架构时生成的graphql代码生成器字段的类型
EN

Stack Overflow用户
提问于 2019-11-29 15:08:28
回答 3查看 1.4K关注 0票数 5

我想重写Hasura生成的graphql模式中的特定字段的jsonb类型,并通过graphql代码生成器运行。

我有一个类型为jsonb的customList字段。它用于包含一个json对象数组。当使用带有TypeScript插件的graphql代码生成器时,生成的类型解析为any。我试图弄清楚如何仅针对该特定字段使用自定义类型来覆盖该类型。

下面的代码片段显示了graphql模式的相关部分,以及目标的graphql类型重写。到目前为止,我尝试过的每一件事都会导致码元错误。

GraphQl模式

代码语言:javascript
复制
  //schema.json  
  ...
  {
    "kind": "OBJECT",
    "name": “MyEntity”,
    "description": "columns and relationships of MyEntity",
    "fields": [
        ...
        {
        "name": "customList",
        "description": "",
        "args": [
            {
            "name": "path",
            "description": "JSON select path",
            "type": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
            },
            "defaultValue": null
            }
        ],
        "type": {
            "kind": "SCALAR",
            "name": "jsonb",
            "ofType": null
        },
        "isDeprecated": false,
        "deprecationReason": null
        },
     }
  }

目标覆盖类型

代码语言:javascript
复制
//clientTypes.graphql

type ListItem {
  itemId: string!
}

extend type MyEntity {
  ccards: [ListItem!]
}

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2021-08-18 13:45:06

有一个用于类型记录插件的scalars配置选项,您可以在其中为任何标量定义自定义类型。

首先,您必须定义一个自定义客户端模式。扩展MyEntity类型,使其具有一个特殊的标量,而不是Jsonb

client-schema.graphql

代码语言:javascript
复制
scalar CardList

extend type MyEntity {
    ccards: CardList!
}

然后创建一个包含此标量类型的文件:

scalars.ts

代码语言:javascript
复制
type ListItem {
  itemId: string!
}

export type CardList = ListItem[]

然后将新模式和自定义类型添加到graphql的.yml配置中,如下所示:

代码语言:javascript
复制
schema:
  - https://your-remote-schema.url/v1/graphql:
documents: "src/**/*.ts"
generates:
  src/graphql/schema.ts:
    schema: src/graphql/client-schema.graphql
    plugins:
      - typescript
      - typescript-operations
    config:
      scalars:
        CardList: ./scalars#CardList

注意:路径应该相对于生成的文件。

https://github.com/dotansimha/graphql-code-generator/issues/153#issuecomment-776735610

票数 1
EN

Stack Overflow用户

发布于 2020-03-22 21:03:14

您可以将代码元指向一个新文件,比如my-schema.js,然后按您希望的方式操作模式。您可以使用您喜欢的任何工具(graphql-toolkit /graphql-组合/直接GraphQLSchema操作)

票数 0
EN

Stack Overflow用户

发布于 2022-11-09 13:59:31

要解决使用@Georges工作流导致的“无法合并类型”问题,请将这一行添加到codegen.yml中:

代码语言:javascript
复制
config:
  ignoreFieldConflicts: true

要获得完整的参考,请查看 github问题。

进一步参考文献

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档