如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?
Posted
技术标签:
【中文标题】如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?【英文标题】:How to use Relay Modern (babel-plugin-relay and relay-compiler) with TypeScript? 【发布时间】:2017-10-15 16:38:16 【问题描述】:使用 TypeScript 时,babel-plugin-relay 和 relay-compiler 不会解析我们的 graphql 调用。我们的 TS 生成的 JS 文件如下所示,针对 ES2015:
var mutation = compat_1.graphql(_templateObject2);
relay-compiler 的输出如下所示,表明没有文件被解析:
Parsed default in 0.05s
Writing default
Writer time: 0.05s [0.05s compiling, 0.00s generating, 0.00s extra]
Unchanged: 0 files
Written default in 0.07s
我们怎样才能让relay-compiler和babel-plugin-relay在这些文件上正常运行?
【问题讨论】:
【参考方案1】:插件和编译器都需要裸 graphql 调用才能正常工作。如果 graphql 调用接受一个对象(如上面采用 _templateObject2
)或在另一个对象上调用(如在上面的 compat_1
上调用),则这两种工具都不起作用。
为了解决这个问题,我们只是使用旧式 require
语句,以便 TS 转译器输出普通的 graphql
调用:
const commitMutation, graphql = require('react-relay/compat');
完美运行。
【讨论】:
以上是关于如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Relay 查询从 TypeScript 转换为 ES5?
中继编译器无法在 Typescript 中提取和使用 graphql 查询
GraphQL 类型在由 Relay 编译时在 Typescript 中被定义为未知
带有 Relay 的 TypeScript:无法解析生成的模块
React Relay (react-relay) with Typescript throwing TypeError: Object prototype may only be an Object