正在导出的值而不是变量



我一直在尝试测试一个只导出一个数字的模块,以及一个递增该数字的函数:

// counter.js
export var number = 0;
export function increment() {
  number++;
}

然后我使用这个模块如下:

// index.js
import { number, increment } from './counter';
console.log(number);
increment();
console.log(number);

我使用JSPM来加载模块,以防这很重要。如果我运行这个,我会得到预期的输出:

0
1

然而,如果我只是简单地将counter.js更改为counter.ts,并让TypeScript transfile这个模块,我的输出最终是:

0
0

transpiled counter.js看起来像:

// counter.js
"use strict";
exports.number = 0;
function increment() {
    exports.number++;
}
exports.increment = increment;

此外,这是我的tsconfig.json:

// tsconfig.json
{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "sourceMap": false
    }
}

这是TypeScript传输该模块的错误吗(并导出数字的常数值,而不是变量本身(,还是我在这里缺少了什么?

我有完全相同的transpiled输出和tsconfig.json设置,但我得到了预期的输出:

0
1

我看到的唯一区别是,您在这里使用的是JSPM,而我没有;我只是用Node.JS(v6.2.0,TypeScript 3.8.9(运行您的代码。

如果有帮助的话,有效的--module选项的tsconfig.json文档说amd, commonjs, system是一些有效的选项。

我创建了一个工作代码的git repo。

https://github.com/TWebster/counter

我正在使用vscode进行调试,以防出现问题。

用以下内容更新tsconfig.json,得到了预期的输出:

{
    "compilerOptions": {
        "module": "system"
    }
}

最新更新