TypeScript中模块上的getter/setter

dan*_*cek 6 webstorm typescript typescript1.4

我在我的TypeScript项目中使用AMD模块(编译器标志"--module amd").虽然我可以在我的课程上轻松使用getter/setter,但我想在我的模块上做同样的事情

export get abc() : string {
    return "abc";
}
Run Code Online (Sandbox Code Playgroud)

回报

错误TS1008:意外的令牌; '模块,类,接口,枚举,导入或声明'预期.

export function get abc() : string {
    return "abc";
}
Run Code Online (Sandbox Code Playgroud)

回报

错误TS1005:'('预期.

我究竟做错了什么?

Fen*_*ton 7

您现在只能将getter和setter添加到类中.

TypeScript在getter和setter上使用的代码转换将属性添加到对象的原型中,这对于类而言比对模块更有意义.


Dan*_*ker 5

使用以下特殊export = ...语法可以实现:

class MyModule {
    get abc() {
        return "abc";
    }
}

var myModule = new MyModule();
export = myModule;
Run Code Online (Sandbox Code Playgroud)

这使得该类的实例MyModule充当模块的API。您不必在类中放入任何数据-只需将函数移入类中,否则就可以保持不变。缺点是,如果函数a调用函数b,则必须说this.b()myModule.b()(后者更接近正常的模块导出)。

另外,您必须先声明一个命名变量。您不能只说:

export = new MyModule(); // This doesn't work
Run Code Online (Sandbox Code Playgroud)