reactjs - 将 React / Relay 项目转换为 TypeScript — 类型导入时解析错误
问题描述
我是TypeScript的新手,正在尝试转换React/Relay 项目,但我对类型导入的解析错误感到困惑。
这是在一个Environment.ts
文件中,它直接从Relay Todo 示例中复制而来。
Relay 示例使用Flow和 .js 扩展名。
// Environment.ts
import {
Environment,
Network,
RecordSource,
Store,
Observable,
type RequestNode, // Parsing error: ',' expected.
type Variables,
} from 'relay-runtime';
作为参考,这里是使用两种类型导入的 fetchQuery:
async function fetchQuery(
operation: RequestNode, // here
variables: Variables, // and here
): Promise<{}> {
let headers;
let token = localStorage.getItem('WUDDIT_JWT');
if (token) {
headers = {
'Content-Type': 'application/json',
Authorization: token ? `Bearer ${token}` : 'bearer',
};
} else {
headers = {
'Content-Type': 'application/json',
};
}
return fetch('/graphql', {
method: 'POST',
headers: headers,
body: JSON.stringify({
query: operation.text,
variables,
}),
})
.then((response) => {
return response.json();
})
.catch((err) => console.log('ERR', err));
}
解决方案
Typescript 对仅类型导入有不同的语法:
您可以删除类型:
// Environment.ts
import {
Environment,
Network,
RecordSource,
Store,
Observable,
RequestNode,
Variables,
} from 'relay-runtime';
或者在单独的导入语句中使用导入类型:
// Environment.ts
import type {
RequestNode,
Variables
} from 'relay-runtime';
// Environment.ts
import {
Environment,
Network,
RecordSource,
Store,
Observable
} from 'relay-runtime';
当您只需要某个模块的类型时,仅类型导入对于消除死代码很有用。在这种情况下,仅使用类型导入没有太多好处。
推荐阅读
- javascript - 一组对象数组
- angular - 如何使 d3 堆叠条形图上的退出设置正常运行?
- php - 如何检查登录用户在 Laravel 5 的管理列上是否有“1”?
- c# - 异常不会从任务 (TPL) 中冒泡
- android - 如何在 Android 上将 Javascript 注入 GeckoView
- python - 在将列表移动到另一个函数之前将列表更改为元组在计算上是否更快?
- java - 为什么当我想从文本文件中删除字符串时它不起作用?
- python - 与for循环表单集断开连接后如何重新连接django信号
- c# - 当 ShowInTaskbar="False" 时检测窗口被 Win+D 最小化
- ruby - 在 eval 语句中面临“没有将 nil 隐式转换为字符串”错误