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

标签 typescript commonjs

我的 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/

相关文章:

angular - 复杂的 TypeScript 循环依赖问题

typescript - 在 Typescript 中使用 ECMA6 数组方法?

javascript - 如何使用 Rollup.js 捆绑使用 Sinon.js 的测试?

node.js - TypeScript 外部 Node 模块有时会转换为 module.exports 和导出

javascript - 导入 json 文件时的 Typescript 编译器错误

reactjs - 创建新类与使用导出 const 之间的差异

javascript - 如何为 React PropTypes 使用 typescript jsdoc 注释

typescript - 使handleRequest成为passportjs守卫上的异步方法

angular - 在Angular 2+单元测试中导入 stub 文件

javascript - 有状态单例模块