web-dev-qa-db-ja.com

Typescriptでクラスインスタンスをエクスポートする方法

TSライブラリを作成していて、クラスのインスタンスをエクスポートしたいのですが、使用するアプリケーションでシングルトンとして使用するつもりです。

現在、私は次の構造を持っています:

index.ts

_export { Foo } from './my-class';
_

foo.ts

_export class Foo {
  functionA() {}
}
_

次に、webpackとbabelを使用してUMD形式にビルドします。別のアプリケーション(Angular)では、クラスにインポートしてインスタンス化し、それに応じて使用できます。

_import { Foo } from 'foo';

private foo = new Foo();

const x = foo.functionA();
_

クラスのインスタンス化されたインスタンスを返す方法はありますか、またはこれを間違った方法で考えていますか?

したがって、new Foo()を実行する代わりに、インポートされたFooは実際にはすでにインスタンスですか?

ありがとう

[〜#〜] update [〜#〜]私は言及したはずですが、インターフェイスなどの他のものをエクスポートしているので、私は考えていませんデフォルトのクラスのエクスポートは正しい方法になるでしょうか? -参照 ここ

9
mindparse

次のように、返されるものを制御できます。

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

そして、それらのバサラトのガイドは次のとおりです: https://basarat.gitbooks.io/TypeScript/docs/project/modules.html

10
user310988

はい、これは完全に可能であり、これはTSでもこれを行うための標準的な方法です。

export default new Foo();

ただし、このインスタンスだけでなくインターフェースもインポートする場合は、次のようにシングルトンをエクスポートします。

export const foo = new Foo();

export doc here を見つけることができます

5
jo_va

シングルトンのみが必要な場合は、シングルトンの慣習に固執する必要があります。

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

    }

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

  }

  export const foo = Foo.instance;
3
ABOS

クラスメンバーのインスタンスをエクスポートすることが可能です。

次のようにクラスインスタンスをエクスポートします:export const playerRoutes = new Routes

次のようにクラスをエクスポートします:export class player

0
amul klinton