TypeScript编译选项中出现“unexpected token import”

3

在我的tsconfig.json文件中,当我将compilerOptions.module从'commonjs'更改为'es6'或'esnext'时,对于所有使用import * as React from 'react'的实例,都会出现"SyntaxError: Unexpected token import"错误。

感谢您的帮助


1
你使用的是哪个浏览器?https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/import#Browser_compatibility - user47589
浏览器是Chrome版本59.0.3071.115(官方构建)(64位)。 - Falieson
你忘记了浏览器的名称。 - user47589
哎呀,已经修复了。是浏览器的问题(哈哈) - Falieson
我笑得很开心。在Chrome中,我认为你必须打开ES6模块(实验性功能)。这个选项在chrome:flags中的某个地方。老实说,当我们在工作中开始使用TS和Babel时,我没有深入研究过这个问题,因为我们必须针对IE进行目标设置,而IE对ES6的支持非常差。 - user47589
请见 https://dev59.com/emAg5IYBdhLWcg3wE3jQ - user47589
1个回答

4

正如@Amy所说,ImportExport关键字在JavaScript中非常新颖,它们的引入始于新的ES6标准,并且每个浏览器的实现都不存在或部分实现。

正如TypeScript文档中所写,导入和导出目前与CommonJS/AMD一起使用。

这两种情况的组合有时会导致SyntaxError,具体取决于您的TSConfig和/或您的浏览器。

我建议

您想使用新的ES6标准

您保持浏览器更新,并参考@Amy提供的链接了解每个浏览器对ImportExport的实现。

您不想使用新的ES6标准

您可以在TSConfig文件中返回到AMDCommonJS。使用此解决方案,您需要使用RequireJS来管理ImportExport,或者使用WebpackBrowserify捆绑您的Typescripts文件。

我的意见

如果您的代码仅用于学习或娱乐,可以使用新的ES6标准。

如果是为了生产,我建议使用Webpack,它难以处理但非常强大。


如果我使用module="es6"(或esnext)和target="es5",那么import/export不应该进行转译吗? 在哪里建议TypeScript编译结束并且Babel转译开始? - Falieson
1
Webpack总是一个很好的建议,不幸的是这是一个MeteorJS项目。 - Falieson
1
@Falieson,如果目标是ES6,则生成的结果就是如此。对于ES5亦然。然后可以通过Babel运行它。在我们公司,我们使用ES5作为目标,因为我们必须针对IE进行目标定向,并出于其他原因将其运行通过Babel。如果我们只是打算将其降级到ES5,那么没有真正需要生成ES6。 - user47589
1
我对TS还不熟悉,但我习惯使用babel。在这个练习库中,我试图保持简单,只使用{presets:["stage-1","react"]}。也许有一些babel功能是@amy正在使用的,可以修复构建的转译问题?我(似乎错误地)理解模块和目标,“模块”=您可以编写的ecma,TS将理解,“目标”=typescript向下构建的内容。 - Falieson
1
@Falieson,老实说,我会就这个问题提出一个新的问题。如果我能回答的话,我会回答的。我没有使用过React。我们在TsConfig.json中有module='none'target='es5'。再次强调,我建议分开问,因为我对这个特定的主题不够了解,无法自信地提供帮助。 - user47589
谢谢 @Amy,我会这样做。 - Falieson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接