2017-12-14 108 views
10

से टाइपस्क्रिप्ट मॉड्यूल का उपयोग करना मैं टाइपस्क्रिप्ट मॉड्यूल का उपयोग करके एक प्रोजेक्ट बनाना चाहता हूं, हालांकि इसे वेनिला जावास्क्रिप्ट से उपभोग करने की अनुमति देता है।जावास्क्रिप्ट

आइए कहें कि इसमें एक एकल वर्ग, A, B, और C युक्त 3 मॉड्यूल शामिल हैं।

यानी

A.ts:

export default class A { 
    /* things */ 
} 

B.ts:

export default class B { 
    /* things */ 
} 

C.ts:

export default class C { 
    /* things */ 
} 

ये सब बनाया गया है और में इकट्ठा किए गए हमारे साथ एक dist.js फ़ाइल bpack। मैं पुस्तकालय के उपयोगकर्ता चाहते हैं

<script src="dist.js"></script> 
<script> 
    var foo = new LettersLibrary.A(); 
</script> 

कैसे मैं यह कर के बारे में जाना होगा के लिए कुछ सदृश करने के लिए सक्षम होने के लिए, अंत में लक्ष्य टाइपप्रति मॉड्यूल का लाभ लेने को विकसित करने में सक्षम हो, लेकिन एक पुस्तकालय प्रदान करना है वेनिला जेएस से प्रयोग योग्य

+0

आप किसी भी टाइपस्क्रिप्ट कस्टम मॉड्यूल या नेमस्पेसिंग से बचने पर विचार कर सकते हैं क्योंकि ['es6' मॉड्यूल को मूल रूप से लाता है] (http://exploringjs.com/es6/ch_modules.html)। बस अनुपालन हो। – Hitmands

उत्तर

6

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

https://www.typescriptlang.org/docs/handbook/namespaces.html

उदाहरण:

namespace LettersLibrary { 
    export class A { 
    hello = "Hello World"; 
    } 

    export class B { 
    myBool = false; 
    } 

    export class C { 
    someInt = 42; 
    } 
} 

जावास्क्रिप्ट में, आप तो करना होगा:

const instance = new LettersLibrary.A(); 
console.log (instance.hello); // "Hello World" 

आप फिर से निर्यात अन्य फ़ाइलों से वर्गों के लिए की जरूरत है, अभी-अभी आयात वर्ग निर्यात कॉन्स के रूप में और टाइप करें (टाइपस्क्रिप्ट विकास के लिए उपयोगी, अन्यथा आप इस प्रकार का उपयोग करने में सक्षम नहीं होंगे मॉड्यूल):

import importA from "..."; 
import importB from "..."; 
import importC from "..."; 

namespace LettersLibrary { 
    export const A = importA; 
    export type A = importA; 

    // Same for B and C 
} 

वेबपैक का उपयोग करते समय, आपको इसे पुस्तकालय के रूप में निर्यात करना होगा। इसके लिए, आप कॉन्फ़िगरेशन का उपयोग library और libraryTarget विकल्पों के साथ कर सकते हैं। देखें: https://webpack.js.org/configuration/output/#output-libraryexport

@ गेब्रियल नून्स के लिए धन्यवाद, जिन्होंने मुझे बताया कि module एस अब namespace एस नामित हैं।

+0

क्या यह संभव है कि तथ्य ए, बी, और सी अलग-अलग फाइलों में हैं? यदि ऐसा है तो यह वह जवाब है जिसे मैं ढूंढ रहा था! –

+0

निश्चित रूप से। बस जिस वर्ग की आपको आवश्यकता है उसे आयात करें और फिर 'निर्यात कॉन्स ए = ए;' और 'निर्यात प्रकार ए = ए; 'का उपयोग पूरी तरह से कार्यात्मक पुन: निर्यातित कक्षा के लिए किया गया है। मैंने अपना जवाब अपडेट कर लिया है। – NikxDa

+0

निर्यात कॉन्स पर मुझे 'ए' को स्पष्ट रूप से टाइप किया गया है 'क्योंकि' इसमें कोई प्रकार की टिप्पणी नहीं है और इसे अपने प्रारंभिक में प्रत्यक्ष या परोक्ष रूप से संदर्भित किया जाता है। 'और' ब्लॉक-स्कोप्ड वेरिएबल 'ए' इसकी घोषणा से पहले उपयोग किया जाता है।' आपका संपादन हल करता है, धन्यवाद ^^ –

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