2015-06-08 37 views
41

AMD modülleri kullanıyorum ve bir dosya arkasındaki karmaşık bir arabirimi gizlemek istiyorum; bu da birkaç dosya yükler ve neyin açığa çıkacağını ve nasıl seçileceğini seçer. Çalışır, bu çözümü kullanırım, ancak çoğunlukla arayüzler ile çok çirkin hissediyor.TipScript dışa aktarılan içe aktarma arabirimi

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 

Kullanımı:

orada
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 

Herhangi daha iyi çözümlere? Her şeyi tek bir dosyaya koymak istemiyorum ama import tek bir dosya istiyorum.

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

cevap

67

eski modülleri için bir ihracat ithalat sözdizimi ve çağdaş ES6 modülleri için standart bir ihracat biçimi bulunmamaktadır. Onları bir araya getirebilirsin.

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

Tüm varyasyonlar için teşekkürler! TS çok daha güzel oldu. –

+0

Ancak, bu yeniden adlandırma stilini bir ad alanında kullanmak yasa dışıdır. –

+1

Eski örneğinize benzer bir arayüzün dışa aktarılması ve içe aktarılması için tek liner var mı? Ya da sadece aynı çizgiyi ithal etmek ve tekrar kullanmak, ancak bunu bir ihracata çevirmek gibi bir durum mu? './message-types' öğesinden içe aktarma {IMessage}; sonra bir sonraki satırda './message-types' öğesinden {IMessage}; – mtpultz

29

bazıları daha fazla örnek here den # c-Snover cevabı yanında:

+0

teşekkürler. Ama son ithalat varyantı neden diğerlerinden ayrıldı? Diğer dörtten az olmamalı mı? – Venryx

+0

Başvurulan siteden geliyor. –

İlgili konular