无法从 .ts 文件导入 .tsx 文件(反之亦然)

Posted

技术标签:

【中文标题】无法从 .ts 文件导入 .tsx 文件(反之亦然)【英文标题】:Cannot import .tsx file from .ts file (and vice versa) 【发布时间】:2018-06-24 13:48:24 【问题描述】:

我有一个包含.ts.tsx 文件的项目,我正在尝试从.ts 文件导入.tsx 文件,如下所示:

src/index.ts

import WriteEditor from './write_editor';

src/write_editor.tsx

import Events from './events';
import Actions from './actions';

export default class WriteEditor extends React.Component  /*...*/ 

现在 TypeScript 告诉我

./src/index.ts 中的错误 找不到模块:错误:无法解析“/Users/luke/Projekte/writejs/code/writejs/src”中的“./write_editor” @ ./src/index.ts 3:23-48 @multi ./src/index.ts

所以我尝试了这个:

src/index.ts

import WriteEditor from './write_editor.tsx';

现在我的 IDE 告诉我不要编写扩展名 tsx,并且我在 src/write_editor.tsx 中遇到错误,因为 TypeScript 无法从 .tsx 文件中找到我的 .ts 文件。

然后我去重命名导入并添加 .ts 扩展

import Events from './events.ts';
import Actions from './actions.ts';

现在我收到大量错误消息,告诉我根本不要编写扩展。

那么我们如何从ts 导入tsx,反之亦然?

【问题讨论】:

您的问题提到了write_editor.jsxwrite_editor.tsx。为什么你有一个.jsx 文件? 哦抱歉打错了,全是tsx 您是否已将 Webpack 配置为自动附加 .ts.tsx 扩展? 我做了,这是我的 webpack 配置gist.github.com/LukasBombach/38b5b1f19da819e6f4effee743162c6d 哦等等,自动追加是什么意思? 【参考方案1】:

当你写作时

import WriteEditor from './write_editor';

Webpack 会自动寻找

./write_editor ./write_editor.js ./write_editor.json (以及其他一些人)

由于您使用的是.ts.tsx,您需要使用resolve.extensions 告诉它也在您的Webpack 配置中查找它们:


  resolve: 
    extensions: [".js", ".json", ".ts", ".tsx"],
  ,

【讨论】:

谢谢谢谢!【参考方案2】:

就我而言,我在使用 typescript-eslint 时遇到了同样的错误。它是由 create-react-app 创建的应用。

方法是在.eslintrc.js中加入这段代码。

module.exports = 
  // ...
  settings: 
    'import/resolver': 
      'node': 
        'extensions': ['.js','.jsx','.ts','.tsx']
      
    
  
;

【讨论】:

【参考方案3】:

在我的例子中,我已将 .jsx 文件重命名为 .tsx,并且必须删除 Parcel 的缓存才能解决它。

【讨论】:

以上是关于无法从 .ts 文件导入 .tsx 文件(反之亦然)的主要内容,如果未能解决你的问题,请参考以下文章

React Jest 测试无法使用 ts-jest 运行 - 导入文件上出现意外令牌

如何将 scss 文件导入打字稿文件

传统js和jsx与ts和tsx的区别

无法在 .tsx 文件中导入 CSS 模块

在 tsx 编译错误中导入 jsx 文件

从 js 重构为 tsx