Я пишу веб-приложение на TypeScript. Приложение использует React и Relay от Facebook. Мой исходный код TypeScript компилируется в код ES6 с помощью компилятора TypeScript TSC. Затем код ES6 преобразуется в код ES5 с помощью Babel. Чтобы Relay работал в браузере, подключаемый модуль Babel должен преобразовывать запросы Relay GraphQL: https://facebook.github.io/relay/docs/guides-babel-plugin.html. Проблема в том, что TSC сначала транспилирует эти запросы, плагин Babel Relay больше их не распознает, поэтому они не транспилируются во что-то понятное браузеру, поэтому браузер выдает ошибку:
Неотловленное нарушение инварианта: RelayQL: неожиданный вызов во время выполнения. Либо преобразование Бабеля не было настроено, либо ему не удалось идентифицировать этот сайт вызова. Убедитесь, что он используется дословно как
Relay.QL
.
Мой исходный код TypeScript:
const SiteQuery = {
store: () => Relay.QL`query { site }`
};
... это компилируется TSC во что-то вроде этого:
var SiteQuery = {\r\n store: function () { return (_a = [\"query { site }\"], _a.raw = [\"query { site }\"], Relay.QL(_a)); var _a; }\r\n};
... вместо чего-то вроде этого (потому что плагин Babel Relay не работает должным образом):
var SiteQuery = {\n store: function store() {\n return (function () {\n return {\n fieldName: 'site',\n kind: 'Query',\n metadata: {},\n name: 'Router',\n type: 'Site'\n };
Это связано с тем, что плагин Babel Relay не распознает транспилированную версию, и в результате он не транспилирует запрос во что-то, понятное браузеру.
Как заставить это работать?