繁体   English   中英

Apollo Server:弹出内置“上传”类型以使用 graphql-codegen 生成 TS 类型

[英]Apollo Server: Eject built in "Upload" Type to generate TS Types with graphql-codegen

我正在使用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 吗?

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

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

您可以使用 graphql- @graphql-codegen/add ( @graphql-codegen/add ) 的插件 add-content 在生成的文件中导入自定义 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

而且,如果你使用阿波罗服务器2,默认阿波罗的行为是自动添加scalar Upload您的模式,所以你需要使用makeExecutableSchema来自graphql-tools

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

享受!

确定,如果您有此错误,只需“导入”标量(不是类型)

通过

scalar Upload

在你的typedef中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM