web-dev-qa-db-fra.com

Comment exporter une instance de classe dans Typescript

Je suis l'auteur d'une bibliothèque TS et je voudrais exporter une instance d'une classe, j'ai l'intention de l'utiliser comme singleton dans l'application consommatrice.

En ce moment, j'ai la structure suivante:

index.ts

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

foo.ts

export class Foo {
  functionA() {}
}

Je construis ensuite au format UMD en utilisant webpack et babel, et dans une autre application (angulaire), je suis capable d'importer dans ma classe, de l'instancier et de l'utiliser en conséquence.

import { Foo } from 'foo';

private foo = new Foo();

const x = foo.functionA();

Existe-t-il un moyen de renvoyer une instance instanciée de ma classe ou est-ce que je pense à cela de la mauvaise façon?

Donc, au lieu d'avoir à faire new Foo(), le Foo importé serait en fait déjà une instance?

Merci

[~ # ~] mise à jour [~ # ~] J'aurais dû mentionner, j'exporte d'autres choses comme les interfaces, donc je ne pense pas qu'un l'exportation de classe par défaut serait-elle la bonne façon de procéder correctement? - voir ici

9
mindparse

Vous pouvez contrôler ce que vous retournez comme ceci:

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

Voici un lien TypeScript Playground montrant les compilations de code et le javascript produit.

La documentation officielle du Manuel TypeScript pour les exportations (et les importations et les réexportations): https://www.typescriptlang.org/docs/handbook/modules.html#export

La documentation MDN (gracieuseté de jo_va): https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export

Et voici le guide de Basarat pour eux: https://basarat.gitbooks.io/TypeScript/docs/project/modules.html

10
user310988

Oui, c'est tout à fait possible, et c'est aussi une manière standard de le faire dans TS.

export default new Foo();

Si toutefois vous souhaitez importer non seulement cette instance mais aussi les interfaces, vous exporterez le singleton comme ceci:

export const foo = new Foo();

Vous pouvez trouver le export doc ici

5
jo_va

Si vous ne voulez que le singleton, vous devez vous en tenir à la convention du singleton,

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

    }

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

  }

  export const foo = Foo.instance;
3
ABOS

Il est possible d'exporter l'instance des membres de classe.

Exportez l'instance de classe comme ceci: export const playerRoutes = new Routes

Exportez la classe comme ceci: export class player

0
amul klinton