2015-06-08 11 views
41

Używam modułów AMD i chcę ukryć złożony interfejs za jednym plikiem, który ładuje kilka innych plików i wybiera, co eksponować i jak. To działa, ja korzystam z tego rozwiązania, ale to wydaje się trochę brzydkie, głównie z interfejsami.Importowany interfejs eksportu 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 

Zastosowanie:

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 

lepiej rozwiązań tam? Nie chcę umieszczać wszystkiego w jednym pliku, ale chcę uzyskać pojedynczy plik o wartości import.

Odpowiedz

67

Jest import eksport składni dla modułów starszych i standardowy format eksportu nowoczesnych modułów ES6:

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

Dzięki za wszystkie odmiany! TS stało się o wiele piękniejsze. –

+0

Niedozwolone jest jednak używanie tego stylu ponownego wywozu w przestrzeni nazw –

+1

Czy istnieje jednolinijkowy mechanizm eksportu i importowania interfejsu w TS podobny do starego przykładu? Czy jest to tylko przypadek importowania, a następnie ponownego użycia tej samej linii, ale zmiana jej na eksport, np. 'import {IMessage} z './message-types';' a następnie w następnym wierszu znajduje się 'export {IMessage} from './message-types';' – mtpultz

29

Więcej przykładów oprócz Odpowiedź # c-Snover jest z here. Możesz je połączyć.

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

Dzięki. Ale dlaczego ostatni wariant importu jest odłączony od pozostałych? Nie powinno być tuż poniżej pozostałych czterech? – Venryx

+0

Pochodzi z tej właśnie strony. –

Powiązane problemy