我的 class
MyStore
包含我的 JS 应用程序的数据和状态。我想在其他文件中导入该类时接收单个实例(我使用的是 commonjs a.k.a 外部模块)。
例子:
MyStore.ts
class MyStore extends BaseStore {
private _items;
getItems() { return _items; }
}
export = MyStore;
其他文件.ts:
import MyStore = require('./MyStore');
MyStore.getItems();
这不起作用,因为我必须在 Otherfile.ts 中实例化 MyStore
我目前的解决方案是使用静态单例方法:
MyStore.ts:
private static _instance = new MyStore();
static getInstance(){ return this._instance;}
其他文件.ts
import MyStore = require('./MyStore');
MyStore.getInstance().getItems();
有没有更好的方法?
编辑:它是 Typescript 类的原因是允许继承(扩展基类)
最佳答案
这应该很简单吧?
class MyStore { ... }
// export a single instance
export = new MyStore(...);
不幸的是,typescript 1.0 不允许这样做。导出值的类型也必须从模块中导出。在这种情况下,这打败了单例的全部观点。
1.1 编译器(尚未正式发布,但可在 GitHub 上获得)修复了此问题。
与此同时,解决方法是使用声明合并来导出具有相同名称的接口(interface)和实现:
class MyStoreImpl implements MyStore {
private _items;
getItems() { return this._items; }
}
interface MyStore {
getItems();
}
var MyStore:MyStore = new MyStoreImpl();
export = MyStore;
关于 typescript :导出保存状态的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505506/