如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?

How to use Relay Modern (babel-plugin-relay and relay-compiler) with TypeScript?

使用 TypeScript 时,babel-plugin-relay 和 relay-compiler 不会解析我们的 graphql 调用。我们的 TS 生成的 JS 文件看起来像这样,针对 ES2015:

var mutation = compat_1.graphql(_templateObject2);

中继编译器的输出如下所示,表明没有文件被解析:

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 在这些文件上正常运行?

插件和编译器都需要简单的 graphql 调用才能正常工作。如果 graphql 调用接受一个对象(如上面的接受 _templateObject2)或在另一个对象上调用(如上面的 compat_1 调用),则这两个工具都不起作用。

为了修复,我们只是使用旧式 require 语句,以便 TS 转译器输出纯 graphql 调用:

const { commitMutation, graphql } = require('react-relay/compat');

完美运行。