导出的值而不是变量

时间:2016-06-24 23:35:54

标签: javascript typescript ecmascript-6

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

// 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转换为此模块,那么我的输出结果为:

0
0

已转换的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如何转换此模块的错误(并导出数字的常量值,而不是变量本身)或者我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:0)

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

Double

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

如果有帮助,有效--module选项的tsconfig.json文档说0 1 是一些有效的选项。

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

https://github.com/TWebster/counter

我正在使用vscode进行调试,以防万一。

答案 1 :(得分:0)

使用以下内容更新我的tsconfig.json给了我预期的输出:

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