2015-06-08 15 views
41

मैं एएमडी मॉड्यूल का उपयोग करता हूं और मैं एक फ़ाइल के पीछे एक जटिल इंटरफ़ेस छिपाना चाहता हूं जो कई अन्य फाइलें लोड करता है और क्या खुलासा करता है और कैसे चुनता है। यह काम करता है, मैं इस समाधान का उपयोग करता हूं लेकिन यह इंटरफेस के साथ ज्यादातर बदसूरत लगता है।टाइपस्क्रिप्ट निर्यात आयातित इंटरफ़ेस

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 

उपयोग:

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 

किसी भी बेहतर समाधान वहाँ बाहर? मैं सबकुछ एक फ़ाइल में नहीं रखना चाहता हूं लेकिन मैं import एक एकल फ़ाइल चाहता हूं।

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

उत्तर

67

विरासत मॉड्यूल के लिए एक निर्यात आयात वाक्य रचना, और आधुनिक ES6 मॉड्यूल के लिए एक मानक निर्यात स्वरूप नहीं है। आप उन्हें एक साथ रख सकते हैं।

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

सभी बदलावों के लिए धन्यवाद! टीएस अभी और अधिक सुंदर हो गया है। –

+0

हालांकि, नामस्थान –

+1

में फिर से निर्यात करने की इस शैली का उपयोग करना अवैध है क्या आपके विरासत उदाहरण के समान टीएस में एक इंटरफेस के निर्यात और आयात के लिए एक लाइनर है? या यह सिर्फ आयात करने का एक मामला है और फिर उसी पंक्ति का पुन: उपयोग कर रहा है, लेकिन इसे निर्यात में बदल रहा है उदाहरण के लिए। './message-types' से आयात {IMessage}; और फिर अगली पंक्ति पर './message-types' से 'निर्यात {IMessage} है;' – mtpultz

29

कुछ और उदाहरण के अलावा here से # सी snover का जवाब:

+0

धन्यवाद। लेकिन आखिरी आयात संस्करण अन्य सभी से अलग क्यों है? क्या यह अन्य चारों के नीचे नहीं होना चाहिए? – Venryx

+0

यह निर्दिष्ट साइट से है। –

संबंधित मुद्दे