【问题标题】:Apollo Server: Eject built in "Upload" Type to generate TS Types with graphql-codegenApollo Server:Eject 内置“上传”类型以使用 graphql-codegen 生成 TS 类型
【发布时间】:2020-03-22 20:02:37
【问题描述】:

我正在使用graphql-codegen 来生成我的 GraphQL TypeDef 文件的 TS 类型。我还使用来自 apollo 服务器的内置 Upload 类型来处理文件上传,但 Upload TypeDef 不在我自己的模式中,它内置在 apollo-server 本身的某个地方。当我尝试通过graphql-codegen 生成时,我收到一个错误:

Error: Unknown type "Upload". Did you mean "Float"?

Unknown type "Upload". Did you mean "Float"?

因为它不在我自己的 typedef 文件中。

我可以以某种方式eject 内置的阿波罗“上传”类型来自己添加 typedef 吗?

【问题讨论】:

    标签: javascript node.js graphql apollo apollo-server


    【解决方案1】:

    我遇到了同样的问题。您必须定义自己的上传类型,在 codegen.yml 配置文件中定义自定义标量,以及其他一些内容。

    # codegen.yml
    config:
      scalars:
        Date: Date
        Upload: FileUpload
    

    您可以使用 graphql-codegen (@graphql-codegen/add) 的插件添加内容在生成的文件中导入自定义 FileUpload 类型:

    # codegen.yml
    generates:
      # Schema ans resolvers types
      ./src/graphql/generated/schema.types.ts:
        plugins:
          - add:
              content: "import { FileUpload } from \"path/to/your/type/file\""
          - typescript
    
    import { ReadStream } from "fs"
    
    export interface FileUpload {
      filename: string
      mimetype: string
      encoding: string
      createReadStream(): ReadStream
    }
    

    顺便说一句,你应该安装@types/node。 而且,为了使事情更简单,您必须在您的 graphql 模式中定义一个标量(否则 graphl-cogeden 会告诉您 Upload 是未知的。

    所以:

    # schema.graphql
    scalar Upload
    

    而且,如果您使用 Apollo Server 2,默认 Apollo 的行为是在您的架构中自动添加 scalar Upload,因此您需要使用 makeExecutableSchema from,graphql-tools

    const server = new ApolloServer({
      schema: makeExecutableSchema({
        typeDefs: schema,
        resolvers,
      })
    

    享受吧!

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2020-12-21
      • 2021-08-29
      • 2019-11-12
      • 2022-01-04
      • 2021-11-16
      • 2021-07-08
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多