Apollo CodeGen无法生成TS类型

时间:2019-03-08 15:58:53

标签: apollo

我正在尝试使用Apollo CodeGen使用自省查询中的json生成一些TS类型。

模式文件的顶部看起来像这样(让我知道是否可以提供其他信息)

{
  "data": {
  "__schema": {
  ...

我得到的错误是这个

➜  continuum git:(typescript) ✗ apollo client:codegen --target typescript --localSchemaFile="./schema.json"
{ Error: Error in "Loading schema for Unnamed Project": Syntax Error: Expected Name, found }

后面有很多我无法理解的输出。这是它的一部分:

graphql-schema:/schema.graphql?%22%22%22Schema%20for%20types%20that%20can%20be%20active%20or%20inactive%22%22%22%0Ainterface%20ActivatedInterface%20%7B%0A%20%20%22%22%22Is%20this%20object%20enabled%3F%22%22%22%0A%20%20active%3A%20Bool!%0A%7D%0A%0A%22%22%22An%20advertisement%22%22%22%0Atype%20Ad%20implements%20CommonInterface%20%7B%0A%20%20%22%22%22Aggregate%20data%20for%20the%20campaigns%20field%22%22%22%0A%20%20_campaignStats(%0A%20%20%20%20%22%22%22Only%20live%20items%22%22%22%0A%20%20%20%20onlyLive%3A%20Bool%20%3D%20null%0A%0A%20%20%20%20%22%22%22%0A%20%20%20%20%3Cp%3EFilters%20to%20be%20applied%20to%20the%20results.%3C%2Fp%3E%0A%20%20%20%20%0A%20%20%20%20%3Cp%3EThe%20following%20%3Ccode%20class%3D%22prettyprint%22%3ECampaign%3C%2Fcode%3E%20fields%20are%20available%20for%20filtering%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cul%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cli%3E%3Ccode%20class%3D%22prettyprint%22%3EexternalId%3C%2Fcode%3E%2C%20operators%3A%0A%20%20%20%20%3Ccode%20class%3D%22prettyprint%22%3EstartsWith%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3EnotStartsWith%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3E%3D%3C%2Fcode%3E%2C%20%3Ccode%20class%3D%22prettyprint%22%3E!%3D%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3E%26lt%3B%26gt%3B%3C%2Fcode%3E%2C%20%3Ccode%20class%3D%22prettyprint%22%3E%26gt%3B%3C%2Fcode%3E%2C%0A%20%20%20%20%3Ccode%20class%3D%22prettyprint%22%3E%26gt%3B%3D%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3E%3D%26gt%3B%3C%2Fcode%3E%2C%20%3Ccode%20class%3D%22prettyprint%22%3E%26lt%3B%3C%2Fcode%3E%2C%0A%20%20%20%20%3Ccode%20class%3D%22prettyprint%22%3E%26lt%3B%3D%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3E%3D%26lt%3B%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3E%26lt%3B%3D%26gt%3B%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3EisNull%3C%2Fcode%3E%2C%20%3Ccode%0A%20%20%20%20class%3D%22prettyprint%22%3EisNotNull%3C%2Fcode%3E%3C%2Fli%3E

我的架构中缺少什么?

2 个答案:

答案 0 :(得分:0)

如果遇到语法错误,则可能是因为架构文件格式错误。生成端点自省结果的最简单方法是只运行以下命令:

apollo service:download --endpoint=<YOUR_ENDPOINT_URL>

这将在您的工作目录中生成一个schema.json文件。

作为旁注,为了生成类型定义,您还需要客户端查询。这是article that goes in to more detail,因为这确实超出了您原始问题的范围。您的完整命令应如下所示:

apollo codegen:generate --localSchemaFile=schema.json --target=typescript --includes=src/**/*.ts --tagName=gql --addTypename --globalTypesFile=src/types/graphql-global-types.ts types

您可以检出the docs以获得所有选项的描述。

答案 1 :(得分:0)

这是我的脚本:

{
    "types:generate": "apollo codegen:generate  --target=typescript --includes=src/**/*.ts --endpoint **youAPI** --header \"Authorization: Basic cHJvamVjdDpzZWV5b3V3ZWIyMDIw(replace your)\" --tagName=gql --addTypename --outputFlat src/types"
}

我希望对您有帮助