我有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类的原因是允许继承(扩展基类)
答案 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;