angular - 如何使用 apollo 客户端从 schema.graphql 中提取 typescript 接口:codegen
问题描述
看来我需要一些帮助,因为我一直在寻找解决方案。
我使用 graphql 创建了一个 Angular 项目并为此配置了 apollo 客户端。在后端,我使用带有 rebing/graphql 扩展的 laravel。现在我想从我的模式中提取一些打字稿接口以在我的逻辑中使用它们。不久前,我开始开发自己的小系统,在该系统中,我在运行时从 json 定义动态生成 gql 查询。我想,这也可能会受到挑战-我想..这就是为什么我的代码本身没有真正的 graphql 查询定义。我不使用任何 .gql/.graphql 文件。
我的 graphql 查询是使用以下内容创建的:
UserModel.with('posts', { pagination: 10, offset: 0 }).get() <-- QueryRef
我想说的是,通过这种方式,我无法轻松启动 apollo typescript 生成器来搜索我的项目中的任何 graphql 查询以生成类型。
我已经管理它从端点下载我的模式,如下所示:
apollo client:download-schema ./libs/graphql/src/lib/schema.graphql --endpoint https://api.ellingtons-palace.com/graphql
它工作得很好。这样我就可以获得 grapqhl 或 json 模式。
我无法生成交互的打字稿文件以在我的代码中使用。我是这样尝试的:
apollo codegen:generate --localSchemaFile=libs/graphql/src/lib/schema.json --target=typescript --includes=libs/graphql/src/lib/schema.graphql --tagName=graphql --addTypename --globalTypesFile=libs/graphql/src/lib/graphql-global-types.ts
不幸的是,每次我收到如下错误:
The type of your project could not be derived from your config.
或者
Field "UserType.Locations" already exists in the schema. It cannot also be defined in this type extension.
有没有人可以告诉我我做错了什么,或者有什么选项可以将我的模式转换为有效的打字稿?
提前致谢!!
问候朱尔斯;)
解决方案
我认为您的问题是,apollo codegen:generate
要工作,您不仅需要模式,还需要提供该工具可以解析的查询。
该查询用于确定工具应生成的类型。它不会根据您查询的属性生成整个架构的所有潜在类型,只会生成您实际需要的类型。
这UserModel.with
不是 graphql 查询语法(看起来像 JavaScript),所以我认为apollo codegen:generate
无法解析它。它可以通过提取 graphql 部分来解析嵌入在 JavaScript(或 TypeScript)中的 graphql。
推荐阅读
- python-3.x - 找到连续的 1 直到计数为 6
- javascript - 如何为 eslint 缩进规则设置 FunctionDeclaration 属性?
- c# - 为什么动态添加的 html 表格行和单元格没有被添加到前端 html 表格中?
- json - 编译板 NodeMCU 1.0(ESP-12E 模块)退出状态 1 时出错
- qt - Qt 小部件;如何创建像 QT Creator 项目选择器这样的设计
- haskell - 无法使用镜头从嵌套 JSON 中收集值
- ios - 无法识别 Swift 5 中的线程 1:致命错误:索引超出范围
- python-3.x - 在pyqt5中拉伸列/标题QTableView
- python - 子进程可以直接将数据交给 Tensorflow,而不需要通过 Python 主进程(避免 GIL 锁)吗?
- javascript - 使用用户操作 Thymeleaf 删除“必需”属性