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)
这应该很简单,对吧?
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)
| 归档时间: |
|
| 查看次数: |
4564 次 |
| 最近记录: |