【问题标题】:Typescript 1.8 - ES2015 imports in js filesTypescript 1.8 - JS 文件中的 ES2015 导入
【发布时间】:2016-05-10 03:29:20
【问题描述】:

我想在现有的 Babel 项目中开始使用 Typescript。我的目标是能够将打字稿添加到构建过程中,而对现有代码的修改尽可能少。出于这个原因,我决定链接 typescript(针对 ES2015)和 Babel。 有了 ts1.8 的 js 文件支持,我想我终于可以保持一切原样,然后一个一个地转换文件。 但这是我遇到的第一个问题:
error TS8003: 'export=' can only be used in a .ts file.

Typescript 不允许 es2015 导出语法:
export default 'foo';.
我们使用 es2015 语法进行导入/导出,我不想为旧的 commonJS 符号更改它。有没有办法让打字稿允许它?

这是一个演示问题的最小示例:

hello.js

export default (name) => console.log(`Hello ${name}`);

tsconfig.json

{
    "version": "1.8",
    "compilerOptions": {
        "module": "es2015",
        "allowJs": true,
        "target": "es2015"
    }
}

命令行(使用 typescript 1.8)

tsc --outDir ../out

结果

hello.js(1,1): error TS8003: 'export=' can only be used in a .ts file.

【问题讨论】:

  • 似乎有点混乱。 export default 'foo'; 用于导出。然后你必须使用相关语法导入:import foo from "./jsfile";
  • 无论如何看这里例如语法github.com/Microsoft/TypeScript/issues/2242
  • 当然,我知道。我将编辑我的问题以避免混淆
  • 上次我检查我确定 typescript 允许 ES6 模块语法。我从 npm 安装了 typescript@next,但最后一个版本也应该可以工作。它到底给了你什么错误?
  • @Zorgatone 汤姆的问题的重点是有很多他不想更改的 .js 文件。他正在使用新的allowJs 标志。

标签: javascript typescript ecmascript-6 babeljs typescript1.8


【解决方案1】:

default export 的错误是a bug in the TypeScript compiler。自从您提交此问题后,我已发送 a fix

如果您想在 JavaScript 文件中指定根模块(这是非标准的,并且特定于某些模块加载器,如 CommonJS),执行此操作的方式与您在 JavaScript 中执行此操作的方式相同:

module.exports = yourRootExportObjectHere;

编译器应识别并尊重这些等同于export = 声明。

【讨论】:

  • 好的,我得到了错误的错误,但我应该得到一个错误吗?最后我可以在 .js 文件中写 export default 了吗?
  • 不,您不应该在默认导出时收到错误。修复已进入,所以明天尝试使用 npm install -g typescript@next 进行夜间构建。
  • 那我明天测试一下。感谢您的帮助!
  • 我已经尝试过夜间睡眠,它似乎有效。你能确认一下吗?
猜你喜欢
  • 2016-08-15
  • 2016-11-04
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2017-05-04
  • 2016-07-22
  • 2016-05-25
相关资源
最近更新 更多