考虑这个模块:
export module Example{
let customer : any;
export function myExample(customer: string) {
// How to reference the module level customer object here?
// Is there a standard to make these module level variables Pascal Case to prevent this overlap?
}
}
customer
函数中的myExample
是一个字符串。如何引用模块级customer
?
如果是课程,我可以使用this.customer
但this
在模块中不起作用,Example.customer
也不起作用,除非客户是出口...
答案 0 :(得分:2)
通常,模块会导出类,函数或枚举等其他元素。
此示例中显示的export module Example
仅指定Example
实际上是命名空间,这意味着对myExample函数的任何引用都必须由命名空间名称预先修复,即{{1 }}
如果您说除非导出客户,否则您是正确的。这是因为Example.myExample()
仅指定命名空间,而不是导出的变量或类。
很难推测您使用export module Example
而不是export module
的原因:
export class
由于使用了export class Example2 {
customer: string = 'Example2.customer';
myExample(customer: string) {
console.log(`Example ${this.customer}`);
console.log(`Example ${customer}`);
}
}
关键字,此类实际上是一个模块。
答案 1 :(得分:0)
以下是问题TS的JS生成版本:
define(["require", "exports"], function (require, exports) {
"use strict";
var Example;
(function (Example) {
var customer;
function myExample(customer) {
// How to reference the module level customer object here?
// Is there a standard to make these module level variables Pascal Case to prevent this overlap?
}
Example.myExample = myExample;
})(Example = exports.Example || (exports.Example = {}));
});
由于客户未被导出,因此会将其生成为私有。现在,标准的Javascript变量范围规则生效,并且无法引用模块级客户。最简单和最简单的解决方案(和IMHO模块级私有变量的标准约定)是强调最外层的客户:
export module Example{
let _customer : any;
export function myExample(customer: string) {
_customer = customer;
}
}