Apollo 服务器中的打字稿语法

Posted

技术标签:

【中文标题】Apollo 服务器中的打字稿语法【英文标题】:Typescript Syntax in Apollo server 【发布时间】:2020-01-21 01:43:38 【问题描述】:

正如您在 appollo 服务器中所知道的,您可以通过将字符串传递给 gql 来定义服务器的架构。

const typeDefs = gql`
type Query 
  getBtcRates: [BtcRate]

`'

但是什么是gql?是函数还是方法?

定义

export const gql: (
  template: TemplateStringsArray | string,
  ...substitutions: any[]
) => DocumentNode = gqlTag;

对我来说它看起来更像一个函数,但我不知道这种语法,所以想知道它到底是什么以及为什么这样写。

【问题讨论】:

What is the purpose of template literals (backticks) following a variable definition in ES6?的可能重复 【参考方案1】:

gql 使用称为tagged templates 的语法,并且不是特定于 TypeScript 的。再举一个例子,styled-components 也依赖于这种语法。

来自文档:

标签允许您使用函数解析模板文字。标记函数的第一个参数包含一个字符串值数组。其余参数与表达式有关。

这是如何工作的一个基本示例:

var variable = 'world';

function myTag(strings, exp) 
  var str0 = strings[0]; // "Hello "
  var str1 = strings[1]; // "!"

  return `$str0$exp$str1`;


var output = myTag`Hello $ variable !`;

console.log(output);
// Hello world!

【讨论】:

以上是关于Apollo 服务器中的打字稿语法的主要内容,如果未能解决你的问题,请参考以下文章

带有打字稿的 Apollo 网关不会在上下文中接受用户 ID

如何使用 Apollo Rover + Codegen 生成打字稿模式类型

尝试使用 React Apollo Query 组件进行 GraphQL 查询,打字稿导致错误

在nestjs应用程序中使用新的阿波罗服务器版本的打字稿错误

如何获取带有变量的graphql查询标签的打字稿定义?

分配前使用的打字稿变量