2015-06-08 11 views
41

Uso i moduli AMD e voglio nascondere un'interfaccia complessa dietro un file che carica diversi altri file e sceglie cosa esporre e come. Funziona, io uso questa soluzione ma sembra un po 'brutta, soprattutto con le interfacce.Interfaccia importata da esportazione TypeScript

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 

Tutte le soluzioni migliori là fuori? Non voglio mettere tutto in un singolo file, ma voglio un file singolo con lo import.

risposta

67

C'è una sintassi esportazione importazione per i moduli legacy, e un formato di esportazione standard per i moduli ES6 moderni:

// 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'; 
+2

Grazie per tutte le varianti! TS è appena diventato molto più bello. –

+0

Tuttavia, è illegale utilizzare questo stile di riesportazione in uno spazio dei nomi. –

+1

Esiste uno strumento per esportare e importare un'interfaccia in TS simile al tuo esempio precedente? O è solo un caso di importare e riutilizzare la stessa linea, ma cambiarla in un'esportazione, ad es. 'import {IMessage} da './message-types';' e poi sulla riga successiva abbiamo 'export {IMessage} da './message-types';' – mtpultz

29

Alcuni altri esempi oltre la risposta di # c-Snover Da here. Puoi metterli insieme.

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) 
+0

Grazie. Ma perché l'ultima variante di importazione è separata da tutte le altre? Non dovrebbe essere appena al di sotto degli altri quattro? – Venryx

+0

Proviene dal sito indicato. –

Problemi correlati