提问者:小点点

如何将自定义标量类型映射到typescript类型时使用graph ql代码生成器?


后端定义了一个名为Date的自定义标量类型,它是一个ISO8601字符串。

在前端中,GraphQL代码生成器(https://www.graphql-code-generator.com/)用于从架构生成打字稿类型。

codegen. yml如下所示:

overwrite: true
schema: 'http://mybackenurl/graphql'
documents: 'src/**/*.graphql'
generates:
    src/generated/graphql.ts:
        config:
            exposeQueryKeys: true
            exposeFetcher: true
            fetcher: '../GraphQLFetcher#fetcher'
            scalars: 
                Date: Date
        plugins:
            - 'typescript'
            - 'typescript-operations'
            - 'typescript-react-query'

这给出了所有在graph ql模式中具有自定义标量类型Date的字段对应于生成的typescript类型中的typescript类型Date的类型。但是在运行时它仍然是一个字符串。如果删除了配置中标量下带有Date: Date的部分,则对应的类型为任何

猜测是我们需要指定某种映射器,将我们从后端获得的ISO8601字符串转换为typescriptDate,但我不明白如何做到这一点。


共1个答案

匿名用户

Codecen不做任何转换,你可以把Date: number放在你生成的文件中,它会很高兴地打印出来。这实际上只是一种为您的API自动生成Typescript类型的方法。

你要找的是不同的,你基本上需要一个“中间件”从你的graph ql客户端:

  1. 可以访问架构。因此,这意味着您需要轻松地将整个架构与您的前端应用程序一起提供,大多数开发人员并不是特别针对私有API。
  2. 可以解析所述模式以匹配标量JSON响应中的字段,然后将它们解释为您想要的任何本机类型(如Date

对于Apollo客户端,您可以使用https://github.com/eturino/apollo-link-scalars.对于urql,我发现https://github.com/clentfort/urql-custom-scalars-exchange.