我在我的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:'('预期。
我做错了什么?
答案 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";
不是最漂亮,但确实可以。