访问从 GraphQL 生成的多个嵌套 TypeScript 类型

Posted

技术标签:

【中文标题】访问从 GraphQL 生成的多个嵌套 TypeScript 类型【英文标题】:Access multiple nested TypeScript type generated from GraphQL 【发布时间】:2021-08-22 13:54:42 【问题描述】:

我只需要访问从 GraphQL 生成的这个大类型中的“部门”类型:

export type GetCompanyChartQuery = (
   __typename?: 'Query' 
  &  generateOrgChart?: Maybe<(
     __typename?: 'DepartmentNode' 
    & Pick<DepartmentNode, 'name'>
    &  manager?: Maybe<(
       __typename?: 'EmployeeNode' 
      & Pick<EmployeeNode, 'name' | 'mobilePhone'>
    )>, departments?: Maybe<Array<Maybe<(
       __typename?: 'DepartmentNode' 
      & Pick<DepartmentNode, 'name' | 'depth'>
      &  manager?: Maybe<(
         __typename?: 'EmployeeNode' 
        & Pick<EmployeeNode, 'name'>
      )>, employees?: Maybe<Array<Maybe<(
         __typename?: 'EmployeeNode' 
        & Pick<EmployeeNode, 'imageUrl' | 'mobilePhone' | 'name' | 'position' | 'title' | 'depth'>
      )>>>, departments?: Maybe<Array<Maybe<(
         __typename?: 'DepartmentNode' 
        & Pick<DepartmentNode, 'name' | 'depth'>
        &  manager?: Maybe<(
           __typename?: 'EmployeeNode' 
          & Pick<EmployeeNode, 'name'>
        )>, employees?: Maybe<Array<Maybe<(
           __typename?: 'EmployeeNode' 
          & Pick<EmployeeNode, 'imageUrl' | 'mobilePhone' | 'name' | 'position' | 'title' | 'depth'>
        )>>> 
      )>>> 
    )>>> 
  )> 
);

我找不到解决方法。 Pick 或 GetCompanyChartQuery['subtype'] 在这里不起作用。

我正在尝试使用 GraphQL 查询获取数据并将响应置于如下状态:

const [departments, setDepartments] = useState<TheTypeINeedToAccess>();

setDepartments(data?.generateOrgChart?.departments);

但要做到这一点,我需要正确的类型。

提前致谢。

【问题讨论】:

【参考方案1】:

我认为选择子类型的问题在于可选属性。如果你使对象不为空,TypeScript 可以挑选出子类型。

type Departments = Required<GetCompanyChartQuery>["generateOrgChart"]["departments"]

【讨论】:

以上是关于访问从 GraphQL 生成的多个嵌套 TypeScript 类型的主要内容,如果未能解决你的问题,请参考以下文章

具有多个嵌套解析器并将字段映射到参数的 GraphQL 查询

如何使用 reactjs 和 graphql 在 gatsby 中映射嵌套数组

有没有办法从 protobuf 生成 GraphQL 模式?

如何从 REST API 定义多个或嵌套 json 数据的数组类型

使用 GraphQL (Nuxt) 访问嵌套节点

从 prisma 生成的客户端访问 graphql 服务器中的数据类型