Apollo服务器:内置“上载”类型的弹出功能,以使用graphql-codegen生成TS类型

时间:2019-11-27 09:44:32

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

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

graphql-codegen

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

我可以以某种方式Error: Unknown type "Upload". Did you mean "Float"? Unknown type "Upload". Did you mean "Float"? 内置的阿波罗“上传”类型来自己添加typedef吗?

2 个答案:

答案 0 :(得分:0)

好吧,如果您遇到此错误,只需“导入”标量(不是类型)

通过

scalar Upload

使用您的typedef

答案 1 :(得分:0)

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

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

您可以使用graphql-codegen(@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

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

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

享受!