使用 graphql-code-generator 生成 React/Apollo 钩子时,数组类型是不是不正确?
Posted
技术标签:
【中文标题】使用 graphql-code-generator 生成 React/Apollo 钩子时,数组类型是不是不正确?【英文标题】:Are array types incorrect when generating React/Apollo hooks with graphql-code-generator?使用 graphql-code-generator 生成 React/Apollo 钩子时,数组类型是否不正确? 【发布时间】:2021-02-22 16:52:16 【问题描述】:我想知道在 graphql 查询/突变中定义的数组(可以是有效的 graphql 实现中的单例或元组)是否被 graphql-codegen 转换为严格的数组类型。这是设计的吗?
鉴于此架构:
schema
query: Query
input CustomFieldFilterInput
id: ID
value: String
type Query
me: User!
users(ids: [ID], customFields: [CustomFieldFilterInput]): [User]
type CustomField
id: ID
value: String
interface Node
id: ID!
type User implements Node
id: ID!
username: String!
email: String!
customfields: [CustomField]
这个查询:
query findUserOrUsers($userIds: [ID], $customFields: [CustomFieldFilterInput])
users(ids: $userIds, customFields: $customFields)
...UserFields
fragment UserFields on User
id
username
graphql-code-generator 将生成:
export type FindUserOrUsersQueryVariables = Exact<
userIds?: Maybe<Array<Maybe<Scalars['ID']>>>;
customFields?: Maybe<Array<Maybe<CustomFieldFilterInput>>>;
>;
但是在我见过的(大多数)graphql 实现中,放入一个数组或单个值是有效的:
query findUsersString
users(ids: 123, customFields: value: "123", id: 123 )
...UserFields
query findUsersArray
users(ids: [123], customFields: [ value: "123", id: 123 ])
...UserFields
我错过了什么吗?有没有办法覆盖它?
这是一个重现“问题”的小型 repo:https://github.com/kweestian/arrays-gql-gen
【问题讨论】:
【参考方案1】:操作中的 GraphQL 输入支持强制,但 codegen 不支持(请参阅:https://github.com/dotansimha/graphql-code-generator/issues/4888) 我们正在努力并希望在即将发布的版本中解决这个问题;)
【讨论】:
以上是关于使用 graphql-code-generator 生成 React/Apollo 钩子时,数组类型是不是不正确?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Hasura graphql 模式时如何自定义 graphql-code-generator 生成的字段的类型
graphql-code-generator 依据graphql schema自动生成客户端类型定义