Typescript:导出保存状态的类的实例

时间:2014-08-26 12:10:18

标签: typescript commonjs

我有class MyStore,其中包含我的JS应用程序的数据和状态。我希望在其他文件中导入该类时收到一个实例(我使用的是commonjs a.k.a外部模块)。

示例:

MyStore.ts

class MyStore extends BaseStore {
    private _items;
    getItems() { return _items; }
} 

export = MyStore;

OtherFile.ts:

import MyStore = require('./MyStore');
MyStore.getItems();

这不起作用,因为我必须在Otherfile.ts中实例化MyStore

我目前的解决方案是使用静态单例方法:

MyStore.ts:

private static _instance = new MyStore();
static getInstance(){ return this._instance;}

OtherFile.ts

import MyStore = require('./MyStore');
MyStore.getInstance().getItems();

还有更好的方法吗?

编辑:它是一个Typescript类的原因是允许继承(扩展基类)

1 个答案:

答案 0 :(得分:5)

这应该很简单,对吧?

class MyStore { ... }
// export a single instance
export = new MyStore(...);

不幸的是,typescript 1.0并不允许这样做。还必须从模块导出导出值的类型。在这种情况下,这会击败整个单身人士。

1.1编译器(尚未正式发布,但在GitHub上可用)解决了这个问题。

与此同时,解决方法是使用声明合并来导出接口和具有相同名称的实现:

class MyStoreImpl implements MyStore {
    private _items;
    getItems() { return this._items; }
}
interface MyStore {
    getItems();
}
var MyStore:MyStore = new MyStoreImpl();
export = MyStore;