如何在 Typescript 中导出 class 实例

How to export a class instance in Typescript

我正在创作一个 TS 库,并希望导出 class 的一个实例,我打算将其用作消费应用程序中的单例。

现在我有以下结构:

index.ts

export { Foo } from './my-class';

foo.ts

export class Foo {
  functionA() {}
}

然后我使用 webpack 和 babel 构建成 UMD 格式,在另一个应用程序 (Angular) 中,我能够导入我的 class,实例化它并相应地使用它。

import { Foo } from 'foo';

private foo = new Foo();

const x = foo.functionA();

有没有办法 return 我的 class 的实例化实例,或者我是不是想错了?

所以导入的 Foo 实际上已经是一个实例,而不是必须做 new Foo()

谢谢

更新 我应该提到,我正在导出其他东西,例如接口,所以我认为默认的 class 导出不是正确的方法吗? - 参见 here

是的,这完全有可能,这也是在 TS 中执行此操作的标准方法。

export default new Foo();

但是,如果您不仅要导入此实例,还要导入接口,则可以像这样导出单例:

export const foo = new Foo();

您可以找到 export 文档 here

您可以像这样控制返回的内容:

// Export the named class directly
export class Foo { }

// Export the named class indirectly
class Bar { }
export { Bar }

// Export an instance of the class directly
export const foo = new Foo();

// Export an instance of the class indirectly
const bar = new Bar();
export { bar };

这是一个 TypeScript Playground link 显示代码编译和生成的 javascript。

用于导出(和导入,再导出)的 TypeScript 手册官方文档:https://www.typescriptlang.org/docs/handbook/modules.html#export

MDN 文档(由 jo_va 提供):https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export

这是 Basarat 的指南:https://basarat.gitbooks.io/typescript/docs/project/modules.html

如果你只想要单例,你应该坚持单例约定,

  export class Foo {
    private static _instance = new Foo();
    private constructor() {

    }

    static get instance() {
      return this._instance;
    }

  }

  export const foo = Foo.instance;

可以导出 class 成员的实例。

像这样导出 class 实例:export const playerRoutes = new Routes

像这样导出 class:export class player