Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript es6模块重新导出可变变量绑定_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript Typescript es6模块重新导出可变变量绑定

Javascript 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以反映更

我尝试使用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以反映更新,但它没有。但是,如果我用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。