我的代码中有外部模块情况。根据建议(参见“Needless namespacing”)我试图避免不必要的命名空间并从任何地方删除模块声明。现在,当模块中函数的参数与模块中另一个函数的名称相同时,我遇到了命名冲突。所以我希望我能以某种方式告诉编译器它不是参数,它是我需要调用的当前模块的另一个函数。考虑:
function a() {
}
function b(a: {}) {
return a(); /// <--- a problem, I wish there was something like: module.a(); or global::a();
}
有没有办法以某种方式克服这个问题而不改变名称?
答案 0 :(得分:0)
function a() {
}
function b(a: {}) {
return this.a(); ///try using this
}
我宁愿建议这样做:
module Testing {
class MyFuncs {
public a = () => { }
public b = (a: {}) => { return this.a()}
}
}
答案 1 :(得分:0)
对于模块,如果导出a
功能,则可以通过模块名称访问它。对于全局项,您需要扩展表示全局根的接口,以便为编译器提供附加项的知识。我已经在下面展示了两个例子。
// Module
module Example {
export function a() {
alert('A1');
}
export function b(a: {}) {
Example.a(); /// <--- I wish there was something like: module.a();
}
}
Example.b({});
// Global
interface Window {
a: () => any;
}
function a() {
alert('A2');
}
function b(a: {}) {
return window.a(); /// <--- I wish there was something like: global::a();
}
b({});
如果这些都不适合您,也许可以更改您的设计以将方法包装在类中,因为使用this
关键字访问类成员,这将它们与局部变量和参数区分开来。 / p>