apollo-codegen输出为空

时间:2017-04-28 20:34:39

标签: graphql

我遇到了apollo-codegen无法成功生成打字稿代码的情况。

对于graphql文件(generated/schema.graphql):

type Author {
  id: Int!
  firstName: String
  lastName: String
  posts: [Post]
}

type Post {
  id: Int!
  title: String
  author: Author
  votes: Int
}
然后我跑了:

$apollo-codegen introspect-schema generated/schema.graphql --output generated/schema.json

这会生成一个似乎包含相关信息的./generated/schema.json(我会看到有关作者及其属性,帖子及其属性的信息)。

然后我跑

$apollo-codegen generate generated/schema.graphql --schema generated/schema.json --target typescript并获得(有效)空输出。

//  This file was automatically generated and should not be edited.
/* tslint:disable */
/* tslint:enable */

我也试过生成.swift文件,类似的空输出。

Apollo codegen版本是:

"apollo-codegen": "^0.11.2",

任何人都能看出我做错了什么?

1 个答案:

答案 0 :(得分:3)

我是apollo-codegen的合作者。很高兴听到你试一试!

您没有看到任何输出,因为 apollo-codegen会根据项目中的GraphQL操作(查询,变异)生成类型 - 而不仅仅基于模式中的类型。

根据我们的经验,您将发送完整GraphQL类型的查询非常罕见。相反,我们发现基于graphql操作的类型是最有用的。

例如,根据您提供的类型,您可以编写查询:

query AuthorQuery {
  authors {
    firstName,
    lastName
  }
}

将生成的类型(以及您可能希望在消耗此查询结果的代码中使用的类型)

type AuthorQuery = {
  authors: Array<{
    firstName: string,
    lastName: string
  }>
}

请注意您在React组件(或类似组件)中如何使用AuthorQuery类型,而您不会使用Author类型,因为它会包含比您更多的字段\ n?实际要求。

如果你有一个从graphql架构到打字稿的1:1类型的用例,请在项目本身提出一个问题,我很乐意在那里讨论:)