TypeScript中模块上的getter / setter

时间:2015-03-03 14:53:35

标签: typescript webstorm typescript1.4

我在我的TypeScript项目中使用AMD模块(编译器标志" - 模块amd")。虽然我可以easily use getters/setters on my classes我想在我的模块上做同样的事情但是

export get abc() : string {
    return "abc";
}

返回

  

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

export function get abc() : string {
    return "abc";
}

返回

  

错误TS1005:'('预期。

我做错了什么?

4 个答案:

答案 0 :(得分:7)

您现在只能在课程中添加getter和setter。

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

答案 1 :(得分:4)

这是可能的,使用特殊的export = ...语法如下:

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

var myModule = new MyModule();
export = myModule;

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

您还必须先声明一个命名变量。你不能只说:

export = new MyModule(); // This doesn't work

答案 2 :(得分:0)

仅供未来访客参考......

类似于@Daniel Earwicker所说的并解释@ billc.cn所说的内容,你也可以将一个类与命名空间混淆,然后将getter / setter定义为一个静态方法:

export class X {
   static get abc():string {
      return "abc";
   }
}

export namespace X {
  // ... other code
}

但这意味着你的库(模块)中将有一个命名空间,除非你想改变你的库属性的方式,你将不得不做@Daniel Earwicker的hack export = X;。提及。

https://www.typescriptlang.org/docs/handbook/declaration-merging.html

答案 3 :(得分:0)

您可以通过类直接将您的吸气剂导出,如下所示:

// helper class to be removed when/if module-level getters are available
class _someHelper {
    static get myStaticString(): string {
        return "hi, world";
    }
}

export const myStaticString = _someHelper.myStaticString;

然后像这样导入:

import { myStaticString } from "my-module";

不是最漂亮,但确实可以。