【问题标题】:How should I access a module internal variable across typescript module fragments?我应该如何跨打字稿模块片段访问模块内部变量?
【发布时间】:2014-02-11 23:11:50
【问题描述】:

我有一个打字稿模块,分为两个文件, 和tsc(0.9.1.1版)编译无误,生成的代码运行正常。

以下是我的模块源文件的摘要:
split_module_example.ts

//file: orders.part1.ts
module Orders {  // first part of Orders
    export var msg : string;
    // set orders here
    msg = 'hello';
}

//file: orders.part1.ts
module Orders {  // second part of Orders
    export var msg : string;
    // reference orders here
    console.log('orders=' + msg);
}

编译器生成这个 javascript,我觉得它是正确的:

//file: orders.part1.ts
var Orders;
(function (Orders) {
    Orders.msg;
    Orders.msg = 'hello';
})(Orders || (Orders = {}));

//file: orders.part1.ts
var Orders;
(function (Orders) {
    Orders.msg;

    // reference orders here
    console.log('orders=' + Orders.msg);
})(Orders || (Orders = {}));

我刚刚将我的 TypeScript 编译器从 0.9.1.1 升级到 0.9.5.0。

但是现在当我运行 tsc 时:

tsc --out split_module_example.js split_module_example.ts

它发出此错误:

split_module_example.ts(9,16): error TS2000: Duplicate identifier 'msg'.

但是,代码仍然可以正常运行。

我想知道是我做错了什么,还是 0.9.5.0 编译器中引入了错误。

  • 如果我做错了什么,跨模块片段引用模块内部变量的正确方法是什么?
  • 如果编译器出错,是否有解决方法?

【问题讨论】:

  • 顺便说一句,您可以通过将上面的 split_module_example.ts 文件粘贴到 TypeScript Play 站点来查看此行为。然后打开浏览器的调试器功能,这样就可以看到控制台了。

标签: module typescript internal


【解决方案1】:

您应该只在一个位置声明变量。只需从除一个模块之外的所有模块中删除 var 声明,一切都会按预期工作。

【讨论】:

  • 但是,如果我删除 export 关键字,它就会停止工作。有没有办法共享这个变量,所以它是模块私有的?
  • 没有。 (cmets 长度必须至少为 15 个字符)
  • 再次,非常感谢。我已经成为 TypeScript 的忠实粉丝。感谢您和您的团队使 JavaScript 工作!
猜你喜欢
  • 2014-05-22
  • 2017-10-26
  • 2014-09-28
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多