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

And*_*ers 6 commonjs typescript

我有class MyStore包含我的JS应用程序的数据和状态.我想在其他文件中导入该类时接收单个实例(我使用的是commonjs,即外部模块).

例:

MyStore.ts

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

export = MyStore;
Run Code Online (Sandbox Code Playgroud)

OtherFile.ts:

import MyStore = require('./MyStore');
MyStore.getItems();
Run Code Online (Sandbox Code Playgroud)

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

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

MyStore.ts:

private static _instance = new MyStore();
static getInstance(){ return this._instance;}
Run Code Online (Sandbox Code Playgroud)

OtherFile.ts

import MyStore = require('./MyStore');
MyStore.getInstance().getItems();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?

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

Gor*_*sev 6

这应该很简单,对吧?

class MyStore { ... }
// export a single instance
export = new MyStore(...);
Run Code Online (Sandbox Code Playgroud)

不幸的是,打字稿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;
Run Code Online (Sandbox Code Playgroud)