未捕获的ReferenceError:在Typescript生成的字段中未定义导出

Bla*_*ode 20 javascript typescript

我正在尝试使用Typescript进行电子开发.在为节点和jquery打字之后,我终于得到了我的.ts文件错误.

问题是,当我运行我的应用程序时,我收到此错误:

index.js:2 Uncaught ReferenceError: exports is not defined
Run Code Online (Sandbox Code Playgroud)

这些是index.js中的前两行:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
Run Code Online (Sandbox Code Playgroud)

我不知道那条线.打字稿在编译时添加了它.如果删除它,我的应用程序工作正常.

我该如何摆脱这个错误?

哦,这是我的tsconfig,如果这是相关的.

{
    "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
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 73

我在嵌入HTML中解决了这个问题:

<script> var exports = {}; </script>
<script src="index.js"></script>
Run Code Online (Sandbox Code Playgroud)

基本上给它想要的东西,一个全球出口变量.

使用我的TypeScript(2.3.2)生成的文件(es6)加载.

  • 这个答案值得更多关注!谢谢 (6认同)

Vik*_*han 19

我也面临同样的问题,并尝试使用不同版本的打字稿,但没有奏效。

终于我明白了 - 有一个"type": "module",当我删除它时 - 它起作用了

  • 我的 `package.json` 中有 type: module 导致了这个问题。删除它使其正常工作(节点&gt; 16) (6认同)
  • F&amp;^%$#g 传奇!这是唯一对我有用的解决方案,解决了大约六个 GIthub 问题和 SO 线程。如此简洁明了。史诗。 (3认同)
  • 这个虚假的“type”:“module”在哪里?tsconfig.json? (3认同)

Pat*_*aut 8

新版本的typescript 2.2.1存在问题,请尝试使用旧版本2.1.6,它解决了您对我的完全相同的问题.

编译时的2.2.1版添加了这一行,Object.defineProperty(exports, "__esModule", { value: true });而旧的2.1.6没有.

  • 但是为什么这条线会导致错误的行为呢? (2认同)
  • 我在TypeScript 3.4.5中遇到此问题。修复程序是否仍可以降级到版本2.1.6? (2认同)
  • 我什至没有使用 typescript,但遇到了这个问题,我是否应该安装 typescript 2.1.6 ? (2认同)
  • 这个时候一定要使用最新的TypeScript。我会寻找一种与使用非常旧的 TypeScript 版本不同的解决方案。 (2认同)

Dr4*_*nys 8

我已经用以下方法修复了我的:

tsconfig.json

{
    "compilerOptions": {
        "target": "ESNext",
        "module": "CommonJS",
        "lib": [
            "DOM",
            "ES5"
        ],
        "esModuleInterop": true
    }
}
Run Code Online (Sandbox Code Playgroud)

添加 esModuleInterop

从 package.json 中删除 "type": "module"


小智 5

我对 Typescript 编译器生成的 js 文件有同样的问题。同一行:

Object.defineProperty(exports, "__esModule", { value: true });
Run Code Online (Sandbox Code Playgroud)

同样的错误:

game.js:2 Uncaught ReferenceError: exports is not defined
Run Code Online (Sandbox Code Playgroud)

我在这个文件中定义了一个游戏类。我通过在我的 game.ts 文件末尾添加这个来解决这个问题:

export = Game;
Run Code Online (Sandbox Code Playgroud)

有了这个,Typescript 编译器替换了:

Object.defineProperty(exports, "__esModule", { value: true });
Run Code Online (Sandbox Code Playgroud)

和:

module.exports = Game;
Run Code Online (Sandbox Code Playgroud)

在这之后,我再也没有错误了。