我正在尝试使用es6模块语法重新导出变量,然后更改它并查看最终导入中反映的更改。但它没有按预期工作。请参阅以下示例:
a.ts
export var a = 1;
export function changeA() { a = 2; }
b.ts
export * from './a';
c.ts
import { a, changeA } from './b';
console.log(a); // 1
changeA();
console.log(a); // Expected 2 but get 1
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "out"
}
}
运行结果:
$ node out/c.js
1
1
我希望最终的console.log打印2以反映更新,但事实并非如此。但是,如果我用babel编译相同的例子,它就可以了。是否重新导出可变变量绑定根本不适用于打字稿,或者我只是做错了什么?
答案 0 :(得分:4)
这是因为$note = Input::all();
var_dump($note);
:
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.ts 强>:
a
<强> b.ts 强>:
export var a = 1;
export var deeper = {
a: 1
};
export function changeA() {
a = 2;
deeper.a = 2;
}
<强> c.ts 强>:
export * from './a';