【问题标题】:Simple typescript file gives exports is not defined error简单的打字稿文件给出未定义导出错误
【发布时间】:2020-08-23 21:02:22
【问题描述】:

我制作了一个简单的打字稿应用程序,它一步一步地抛出错误,

代码:

app.ts

function add(a,b){
    return a + b;
}

const result = add('10','5');

console.log(result);

错误 1:

无法重新声明块范围变量“result”。

解决方案 1: 包含export {} 中的app.ts 喜欢,

 export {}
 function add(a,b){
        return a + b;
    }

    const result = add('10','5');

    console.log(result);

这也编译 js 文件,如,

"use strict";
exports.__esModule = true;
function add(a, b) {
    return a + b;
}
var result = add('10', '5');
console.log(result);

这会导致浏览器出现错误,例如,

未捕获的 ReferenceError:未定义导出 在 app.js:2

请帮助我如何解决此问题?还添加了tsconfig.json 文件,但这也没有帮助它引发错误,例如,

/@types/express/index.d.ts' 未找到。

Typescript 版本:3.8.3 版

【问题讨论】:

  • 您是否试图将此代码粘贴到浏览器的控制台中?
  • @sylvanaar,不,我不在浏览器中。我只在终端中运行代码。

标签: javascript typescript typescript-typings


【解决方案1】:

按原样导出:

function add(a: string, b: string) {
    return a + b;
}

const result = add('10','5');

export { result };

【讨论】:

    【解决方案2】:

    您首先遇到错误的原因可能是因为 TS 也在拾取已编译的文件,并假设结果正在被重新定义,因为它看到 2 个文件声明了相同的全局变量。

    当您使用varconst 可能转译为)和function 时,脚本会创建全局变量。模块不这样做。

    如果文件没有导出或导入语句,TypeScript 会假定该文件是一个脚本。所以添加export {} 会使错误消失。

    但是,您使用的是 TS 中的默认模块系统,即 CommonJS,因此文件被转译,假设其范围内有一个 exports 对象。 NodeJS 中会出现这种情况,但浏览器不会出现这种情况。

    如果您将 tsconfig.json 更改为 module: "ES2015"module: "ESNext",编译器将使用 import 和 export 语句,如果入口点是用 <script type="module" src="... 定义的,则它们在浏览器中工作。

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 2021-09-13
      • 2018-04-17
      • 2018-01-21
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2020-04-28
      • 2018-04-20
      相关资源
      最近更新 更多