可以使用名称空间方法,只需导出子名称空间
namespace mynamespace {
function funcX(): boolean { return false; }
namespace private {
export function funcPrivate(): boolean { return false; }
}
export namespace subnamespace1 {
export function func1(): boolean { return funcX(); }
}
export namespace subnamespace2 {
export function func2(): boolean { return private.funcPrivate(); }
export function func3(): boolean { return true; }
}
}
mynamespace.subnamespace1.func1(); // ok in both js and ts
mynamespace.subnamespace2.func2(); // ok in both js and ts
mynamespace.funcX() // not accesible
mynamespace.private.funcPrivate() // not accesible
名称空间解决方案不会输出与手写版本完全相同的js(它更多地依赖于函数闭包),但功能应该是相同的。
如果生成相同的JS模式对您很重要,那么您可以继续使用添加了TS类型的JS版本。没有理由不起作用:
var mynamespace = (function () {
var private = {
funcX: function (): any {},
};
var public =
{
subnamespace1: {
func1: function (ctl: HTMLElement): boolean { return true;},
},
subnamespace2: {
func2: function (sender: any, args: any): void { },
func3: function (sender: any, args: any): void {
private.funcX();
},
}
};
return public;
})();
mynamespace.subnamespace1.func1(null); // ok in both js and ts
mynamespace.subnamespace2.func2(null, null); // ok in both js and ts