2015-11-17 9 views
7

मैं ES6 मॉड्यूल से संबंधित कुछ चीजों को समझने की कोशिश कर रहा हूं। कोणीय और टाइपस्क्रिप्ट के साथ नामस्थान का उपयोग कैसे करें।टाइपस्क्रिप्ट में मॉड्यूल कीवर्ड का क्या अर्थ है?

निम्नलिखित कोड एक कोणीय निर्देश का प्रतिनिधित्व करता है मान लें। क्या किसी को पता है कि module कीवर्ड का अर्थ क्या है और आप अन्य फ़ाइल में MyClass तक कैसे पहुंच सकते हैं।

// file1.ts 
module NSpace.Space { 
    export class MyClass { 
     constructor() { ... } 
     ... 
    } 
} 

मैं का उपयोग कर और फिर से निर्यात अन्य फ़ाइल पर पहुँचने के की कोशिश की है, फिर भी

// file2.ts 
import {MyClass} from 'file1'; 

export {MyClass} 

मैं इस त्रुटि मिलती है: एक मॉड्यूल नहीं है फ़ाइल 'file.ts': त्रुटि TS2306

मेरे प्रश्न हैं:

  • मुझे यह क्यों मिलता है?
  • यह module कीवर्ड क्या है?
  • हम केवल निर्देशिका संरचना के आधार पर ES6 मॉड्यूल बना सकते हैं या हम वास्तव में इस संकेतन का उपयोग कर सकते हैं? module Space.Space1.Space2 ...

मैं क्या पढ़ सकते हैं और अनुभव किया है अब तक ऐसा लगता है कि ES6 मॉड्यूल फ़ाइल संरचना के आधार पर परिभाषित कर रहे हैं से, यही कारण है कि मैं इस त्रुटि मिलती है।

मैं इस कोड लिखा गया है, यही कारण है कि मैं पूछ रहा हूँ है। यह भी उल्लेख करना उपयोगी हो सकता है कि मैं आयात करने के लिए System.JS का उपयोग कर रहा हूं।

+4

'module' कीवर्ड [विशिष्ट टाइपप्रति करने के लिए] (है http://www.typescriptlang.org/Handbook#modules)। यह एक ईएस 6 सुविधा नहीं है, जो मानता है कि 'आयात' के साथ लोड की गई सभी फाइलें डिफ़ॉल्ट रूप से मॉड्यूल हैं – CodingIntrigue

उत्तर

7

module टाइपस्क्रिप्ट में कीवर्ड ने थोड़ा भ्रम पैदा किया, इसलिए इसे namespace का नाम दिया जा रहा है।

नामस्थानों का उपयोग करने के बजाय, आप फ़ाइलों/फ़ाइल सिस्टम द्वारा अपना कोड व्यवस्थित कर सकते हैं (जिसका अर्थ है कि वास्तविक फ़ाइल स्थान कथित नामस्थान से मेल खाता है। इस प्रकार "बाहरी मॉड्यूल" (टाइपस्क्रिप्ट) काम करता है - और यह भी कि कैसे ECMAScript 2015 मॉड्यूल काम

एक त्वरित समायोजन के साथ तो, आप होगा:।

// file1.ts 
export class MyClass { 
    constructor() { ... } 
    ... 
} 

और फिर इस काम करेगा:

import {MyClass} from 'file1'; 

आप कंप्यूटर अनुप्रयोग हैं आईआईएल लक्ष्यीकरण I6, आप देखेंगे कि कोड की इस पंक्ति को कोई अनुवाद की आवश्यकता नहीं है, यह मॉड्यूल आयात के लिए मानक से मेल खाता है। यदि आप ES5 या उससे कम लक्षित करते हैं, तो टाइपस्क्रिप्ट आपके लिए इस कथन को बदल देगा (आप --module ध्वज का उपयोग करके परिवर्तन का चयन कर सकते हैं।

मैं यूएमडी संकलन विकल्प का उपयोग करता हूं, जिसका अर्थ है कि आउटपुट वेब ब्राउज़र में काम करेगा (RequJS के साथ) या नोड पर। प्रणाली जे एस वास्तव में, वर्तमान में कर्षण का एक बहुत प्राप्त कर रहा है तो आप पर विचार करना है कि बहुत। आखिरकार, ब्राउज़रों बस देशी रूप मॉड्यूल लोड हो रहा है समर्थन करेंगे कर सकते हैं।

+1

वही है जो मैंने मॉड्यूल लोडिंग के बारे में समझा है। असल में यह ' मॉड्यूल defini के लिए दोनों तरीकों का उपयोग करने के लिए समझ में नहीं आता है tion। – ipinak

+0

टाइपो?"अनुवाद करने की जरूरत है" शायद "कोई अनुवाद की आवश्यकता नहीं है" – JohnnyHK

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