我遇到了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",
任何人都能看出我做错了什么?
答案 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类型的用例,请在项目本身提出一个问题,我很乐意在那里讨论:)