Javascript Typescript es6模块重新导出可变变量绑定
我尝试使用es6模块语法重新导出变量,然后对其进行更改,并查看最终导入中反映的更改。但它并没有像预期的那样发挥作用。请参见下面的示例: a、 ts b、 ts c、 ts tsconfig.jsonJavascript Typescript es6模块重新导出可变变量绑定,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我尝试使用es6模块语法重新导出变量,然后对其进行更改,并查看最终导入中反映的更改。但它并没有像预期的那样发挥作用。请参见下面的示例: a、 ts b、 ts c、 ts tsconfig.json { "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "out" } } 运行结果: $ node out/c.js 1 1 我希望最终的console.log打印2以反映更
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "out"
}
}
运行结果:
$ node out/c.js
1
1
我希望最终的console.log打印2以反映更新,但它没有。但是,如果我用babel编译相同的示例,它就可以工作了。重新导出可变变量绑定对typescript根本不起作用,还是我只是做错了什么?这是因为
b.ts
:
export * from './a';
传送到
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./a'));
变量a
的值被复制而不被引用
你可以这样做:
a.ts:
export var a = 1;
export var deeper = {
a: 1
};
export function changeA() {
a = 2;
deeper.a = 2;
}
export * from './a';
import { a, deeper, changeA } from './b';
console.log(a); // 1
changeA();
console.log(a); // Expected 2 but get 1
console.log(deeper.a); // prints 2 as expected
b.ts:
export var a = 1;
export var deeper = {
a: 1
};
export function changeA() {
a = 2;
deeper.a = 2;
}
export * from './a';
import { a, deeper, changeA } from './b';
console.log(a); // 1
changeA();
console.log(a); // Expected 2 but get 1
console.log(deeper.a); // prints 2 as expected
c.ts:
export var a = 1;
export var deeper = {
a: 1
};
export function changeA() {
a = 2;
deeper.a = 2;
}
export * from './a';
import { a, deeper, changeA } from './b';
console.log(a); // 1
changeA();
console.log(a); // Expected 2 but get 1
console.log(deeper.a); // prints 2 as expected
这是否意味着typescript不完全支持ES6模块语法?有一个解决方案是很好的,但我更希望不必在变量前加前缀。但如果这是唯一可行的方法,我想我别无选择。据我所知,如果生成的代码是特定于es5的,那么它就可以工作,因为我已经设置了target=es5。