Question Interface importée TypeScript importée


J'utilise des modules AMD et je veux cacher une interface complexe derrière un fichier qui charge plusieurs autres fichiers et qui choisit quoi exposer et comment. Cela fonctionne, j'utilise cette solution, mais c'est plutôt moche, surtout avec les interfaces.

import Types = require('./message-types');
import MessageBaseImport = require('./message-base');
export interface IMessage extends Types.IMessage {} // This is an interface
export var MessageBase = MessageBaseImport; // This is a class

Usage:

import Message = require('message');
import { * } as Message from 'message'; // Or with ES6 style
var mb = new Message.MessageBase(); // Using the class
var msg: Message.IMessage = null; // Using the interface 

De meilleures solutions? Je ne veux pas tout mettre dans un seul fichier mais je veux import un seul fichier.


50
2018-06-08 15:01


origine


Réponses:


Il existe une syntaxe d'importation pour les modules hérités et un format d'exportation standard pour les modules ES6 modernes:

// export the default export of a legacy (`export =`) module
export import MessageBase = require('./message-base');

// export the default export of a modern (`export default`) module
export { default as MessageBase } from './message-base';

// export an interface from a legacy module
import Types = require('./message-types');
export type IMessage = Types.IMessage;

// export an interface from a modern module
export { IMessage } from './message-types';

81
2018-06-08 16:18



Quelques exemples en plus de la réponse de # c-snover ici. Vous pouvez les mettre ensemble.

import 'jquery';                        // import a module without any import bindings
import $ from 'jquery';                 // import the default export of a module
import { $ } from 'jquery';             // import a named export of a module
import { $ as jQuery } from 'jquery';   // import a named export to a different name
import * as crypto from 'crypto';       // import an entire module instance object

export var x = 42;                      // export a named variable
export function foo() {};               // export a named function

export default 42;                      // export the default export
export default function foo() {};       // export the default export as a function

export { encrypt };                     // export an existing variable
export { decrypt as dec };              // export a variable as a new name
export { encrypt as en } from 'crypto'; // export an export from another module
export * from 'crypto';                 // export all exports from another module
                                        // (except the default export)

33
2018-06-11 20:59



Dans mon cas particulier, j'ai dû déclarer l'interface au lieu de l'exporter.

declare interface IFluxStoreSyncOptions{
  namespacedKey: string;
}

Pour utiliser l'interface en tant que type dans un autre fichier comme celui-ci:

export function FluxStoreSync(options: IFluxStoreSyncOptions){
}

De cette façon, vous n'avez pas à exporter ni à importer l'interface.


0
2018-06-15 14:20