从TypeScript生成GraphQL模式?

22

我最近刚开始接触Apollo,希望能够通过一个新的GraphQL层来公开一些现有的REST API。

这些REST服务已经由一套广泛的自定义TypeScript类型定义(请求和响应数据结构)完全覆盖。

我希望找到一种方法来重用这些现有类型,并且可以在其上添加一些额外的Query类型,以生成GraphQL模式,而不是复制代码。

令人惊讶的是,这似乎是一个相当罕见的用例?我发现了许多从GraphQL生成TypeScript定义的工具,但反向方向似乎很难。

type-graphql仅在所有自定义类型都是class时才有效。这对我无法实现;我这里没有一个单独的类,而是有很多简单的type

ts2graphql已经一年没有更新了,我甚至无法使示例代码正常工作。

我还能尝试什么?


3
是否有同样的问题。毕竟,TS 类型比 GQL 更具表现力,因此从 TypeScript 类型生成 Graphql 模式是合乎逻辑的。甚至更好的做法是使用一些运行时规范解决方案,如 io-ts 或 Clojure 的 spec,以生成 Graphql 模式作为一种微不足道的派生。 - Matrix Norm
你们找到解决方案了吗?我也需要同样的东西。 - Gab
有人[更加决心,拥有“无数类型”的视角/需要大量手动工作的视角]应该编写types2classes转换器吗? - xadm
由于TS类型比GraphQL更具表现力,这使得将TS类型映射到GraphQL类型变得太困难了。您必须想出如何处理GraphQL不支持的所有内容。 - Dobes Vandermeer
令人惊讶的是,这似乎并不存在?除了手动工作之外,大家是否找到了解决方案?也许其他语言中有工具?原因必须是包装现有的RESTful API是唯一的用例。但这仍然很奇怪。 - xddq
显示剩余2条评论
2个回答

2
据我所知,目前没有一种完全自动化地从 TypeScript 代码生成 GraphQL schema 的方法,因为 TypeScript 更具表现力,只能描述 GraphQL 实体而不能描述查询、订阅和突变(除非使用一些神奇的命名通用类型)。
我发现了一个不太流行的项目ts-graphql,它可能对您在 TypeScript 中半自动描述 GraphQL schema 时有所帮助。
更好的同步 TypeScript 和 GraphQL 的方法是从 GraphQL schema 生成 TS 类型和接口。像graphql-code-generator.comApollo server这样的流行项目可以用于该方法。

0

Pothos可能会在这里有所帮助。它专注于使用Typescript构建GraphQL架构,而无需type-graphql的类要求。虽然您仍然需要手动定义GraphQL架构,但应该能够利用现有的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接