typescript 中不同 GraphQL 语法的优缺点
Posted
技术标签:
【中文标题】typescript 中不同 GraphQL 语法的优缺点【英文标题】:Pros and cons of different GraphQL syntax in typescript 【发布时间】:2018-05-13 12:48:05 【问题描述】:我一直在看很多关于 GraphQL 的不同教程,它们的编写方式都不同。我想知道它们的优点和缺点是什么。此外,您将如何模块化不同文件中的类型、查询等?我看到的第一种方法是使用字符串来描述 GraphQL 模式,然后将其导出然后导入模式文件。这看起来像这样:
const typeDefs = `
type Query
testString: String
`;
然后是使用 express-graphql 包并使用对象来描述模式的下一种方法。这看起来像这样:
const todoType = new GraphQLObjectType(
name: 'todo',
description: 'todo item',
fields: () => (
itemId:
type: (GraphQLInt),
description: 'The id of the todo.',
,
item:
type: GraphQLString,
description: 'The name of the todo.',
,
completed:
type: GraphQLBoolean,
description: 'Completed todo? '
)
);
我见过的另一种方法是使用 graphql 文件。
这只是个人喜好,还是使用其中一个比另一个有真正的好处?
我知道我提到的第一个可能缺少语法突出显示,但这看起来最接近实际的 graphql 语法。我的首选是使用 graphql 文件。但问题是如何将这一切模块化?如何将几个不同的 .graphql 文件合并在一起并在单个架构中使用它们?
【问题讨论】:
【参考方案1】:在模式文件或字符串中定义查询可让您快速原型化 GraphQL 接口。这是很好的入门和实现一些解析器。当您的架构增长时,架构定义也会大量增长。我们只有几种类型,但我们的模式文件超过 1000 loc。这就是我们在 javascript 中定义类型并在定义中编写解析器的原因。大多数解析器都非常简单,并且使用包含实际类型解析逻辑的数据加载器。 new tool by GraphCool 允许在模式定义中导入。这种方式违背了我上面的观点,并允许在使用模式语言的同时进行扩展。
顺便说一句:GraphQL 模式定义有语法高亮,例如在 Atom 中通过language-babel
【讨论】:
【参考方案2】:如果您想在 Node.js 中将 GraphQL 与 TypeScript 一起使用,可以查看TypeGraphQL。
此工具将允许您通过使用装饰器定义打字稿类来摆脱描述类型、查询、变异、参数和输入的接口。 所以你只有一个事实来源,不需要跳过代码库来添加字段、更改其类型等。
【讨论】:
以上是关于typescript 中不同 GraphQL 语法的优缺点的主要内容,如果未能解决你的问题,请参考以下文章
如何为 TypeScript 配置 `*.graphql` 导入?
如何修复这个 typescript 和 graphql 错误?