后端定义了一个名为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
,但我不明白如何做到这一点。
Codecen不做任何转换,你可以把Date: number
放在你生成的文件中,它会很高兴地打印出来。这实际上只是一种为您的API自动生成Typescript类型的方法。
你要找的是不同的,你基本上需要一个“中间件”从你的graph ql客户端:
Date
)对于Apollo客户端,您可以使用https://github.com/eturino/apollo-link-scalars.对于urql,我发现https://github.com/clentfort/urql-custom-scalars-exchange.