Javascript 未捕获引用错误:在Typescript生成的字段中未定义导出
我正在尝试开始电子开发的Typescript。在努力为node和jquery键入内容之后,我终于使.ts文件没有错误 现在的问题是,当我运行我的应用程序时,会出现以下错误:Javascript 未捕获引用错误:在Typescript生成的字段中未定义导出,javascript,typescript,Javascript,Typescript,我正在尝试开始电子开发的Typescript。在努力为node和jquery键入内容之后,我终于使.ts文件没有错误 现在的问题是,当我运行我的应用程序时,会出现以下错误: index.js:2 Uncaught ReferenceError: exports is not defined 以下是index.js中的前两行: "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); 我不知道那句话
index.js:2 Uncaught ReferenceError: exports is not defined
以下是index.js中的前两行:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
我不知道那句话有什么用。Typescript在编译时添加了它。如果我删除我的应用程序,它可以正常工作
我如何消除这个错误
哦,这是我的配置,如果相关的话
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"isolatedModules": false,
"jsx": "react",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"declaration": false,
"noImplicitAny": false,
"noImplicitUseStrict": false,
"removeComments": true,
"noLib": false,
"preserveConstEnums": true,
"suppressImplicitAnyIndexErrors": true
},
"exclude": [
"node_modules",
"typings/browser",
"typings/browser.d.ts"
],
"compileOnSave": true,
"buildOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
快速修复
将tsconfig.json中的
“target”:“es6”
更改为“target”:“es5”
。typescript 2.2.1的新版本存在问题,请尝试使用旧版本2.1.6,它解决了与我完全相同的问题
关于编译的版本2.2.1添加了这一行
Object.defineProperty(导出,“\uu esModule”,{value:true})代码>而旧版本的2.1.6没有。我通过嵌入HTML中的一个技巧解决了这个问题:
<script> var exports = {}; </script>
<script src="index.js"></script>
var exports={};
基本上是给它想要的,一个全局变量
随着TypeScript(2.3.2)生成的文件(es6)的加载,我的TypeScript编译器生成的js文件也出现了同样的问题。同一行:
Object.defineProperty(exports, "__esModule", { value: true });
同样的错误:
game.js:2 Uncaught ReferenceError: exports is not defined
我在这个文件中定义了一个游戏类。我通过在game.ts文件末尾添加以下内容解决了此问题:
export = Game;
这样,Typescript编译器被替换为:
Object.defineProperty(exports, "__esModule", { value: true });
与:
在此之后,我再也没有错误了。我遇到了同样的问题,我只是修改了systemjs.config.js文件,如下所述
'npm:':'/node\u modules/'-->它的值只是'node\u modules/',我在开头添加了'/'
'app':'/src/app'-->其值仅为'app',由于我的app文件夹路径不同,因此相应地对其进行了更改
loader:'/src/systemjs angular loader.js'-//它的值只是“systemjs angular loader.js”,由于它在我的项目中的位置不同,所以将它指向了正确的路径我也面临同样的问题,尝试使用不同版本的typescript进行更改,但没有成功
最后我得到了它-有一个“类型”:“module”
,当我移除它时-它工作了我用以下方法修复了我的:
tsconfig.json
{
“编译器选项”:{
“目标”:“ESNext”,
“模块”:“CommonJS”,
“lib”:[
“DOM”,
“ES5”
],
“esModuleInterop”:true
}
}
添加esModuleInterop
从package.json中删除“type”:“module”将您的tsconfig.jsonmodule
更改为es2015
,并将模块解决方案
更改为节点
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node"
}
}
导出。当我们(使用babel或TypeScript)时,模块
和要求('lib')
。解决方案
tsconfig.json
"module": "ESNext",
"target": "ESNext",
index.html
<script type="module" src="script.js"></script>
这很有效!对于像我这样使用Atom和Typescript包的人;通过npm下载typescript 2.1.6(packagename@version). 然后进入程序包的源代码,将node_模块中的typescript文件夹替换为您刚刚下载的文件夹。但为什么这一行会导致错误行为?@МаъСаъъъ看一下下面Markus Hahn的答案:我在typescript 2.9.2中遇到了这个问题。现在不是已经解决了吗?我在TypeScript 3.4.5中遇到了这个问题。修复程序是否仍要降级到版本2.1.6?如果您将“module”
的值更改为例如“es5”
请尝试此解决方案,我需要删除:F&^%$\g lengend!这是唯一一个解决GIthub问题的解决方案。如此简明扼要。史诗。
<script type="module" src="script.js"></script>