यह काम क्यों नहीं करता है
import * as MC from './MyClass';
यह ES6 / ES2015-शैली importवाक्यविन्यास है। इसका सटीक अर्थ "मॉड्यूल नेमस्पेस ऑब्जेक्ट से लोड किया गया है ./MyClassऔर इसे स्थानीय रूप से उपयोग करना है MC"। विशेष रूप से, "मॉड्यूल नेमस्पेस ऑब्जेक्ट " में गुणों के साथ केवल एक सादे वस्तु होती है। एक ES6 मॉड्यूल ऑब्जेक्ट को फ़ंक्शन के साथ या उसके साथ नहीं लगाया जा सकता है new।
इसे फिर से कहने के लिए: एक ईएस 6 मॉड्यूल नेमस्पेस ऑब्जेक्ट को एक फ़ंक्शन के रूप में या साथ नहीं लगाया जा सकता है new।
किसी मॉड्यूल से आपके द्वारा importउपयोग की जाने वाली चीज़ * as Xको केवल गुणों के लिए परिभाषित किया गया है। खराब कॉमनजेएस में यह पूरी तरह से सम्मानित नहीं हो सकता है, लेकिन टाइपस्क्रिप्ट आपको बता रहा है कि मानक द्वारा निर्धारित व्यवहार क्या है।
क्या काम करता है?
आपको इस मॉड्यूल का उपयोग करने के लिए CommonJS- शैली आयात सिंटैक्स का उपयोग करना होगा:
import MC = require('./MyClass');
यदि आप दोनों मॉड्यूल को नियंत्रित करते हैं, तो आप export defaultइसके बजाय उपयोग कर सकते हैं :
MyClass.ts
export default class MyClass {
constructor() {
}
}
MyConsumer.ts
import MC from './MyClass';
मैं इस बारे में दुखी हूँ; नियम गूंगे हैं।
ES6 आयात सिंटैक्स का उपयोग करना अच्छा होता, लेकिन अब मुझे यह import MC = require('./MyClass');काम करना है? यह 2013 की बात है! लंगड़ा! लेकिन दुख प्रोग्रामिंग का एक सामान्य हिस्सा है। कृपया Kübler-Ross मॉडल: स्वीकृति में चरण पांच पर जाएं।
यहां टाइपस्क्रिप्ट आपको बता रहा है कि यह काम नहीं करता है, क्योंकि यह काम नहीं करता है। हैक होते हैं ( इस कार्य को प्रदर्शित करने के लिए एक namespaceघोषणा को जोड़ना एक MyClassलोकप्रिय तरीका है), और वे आज आपके विशेष डाउनलिवलिंग मॉड्यूल बंडलर (जैसे रोलअप) में काम कर सकते हैं, लेकिन यह भ्रमपूर्ण है। वहाँ अभी तक जंगली में कोई ES6 मॉड्यूल कार्यान्वयन नहीं हैं, लेकिन यह हमेशा के लिए सच नहीं होगा।
अपने भविष्य के स्वयं के चित्र, एक साफ-सुथरे देशी ईएस 6 मॉड्यूल के क्रियान्वयन पर चलने की कोशिश करना और यह पता लगाना कि आपने ईएस 6 सिंटैक्स का उपयोग करने की कोशिश करके खुद को बड़ी विफलता के लिए तैयार किया है, जो ईएस 6 स्पष्ट रूप से नहीं करता है ।
मैं अपने गैर-मानक मॉड्यूल लोडर का लाभ उठाना चाहता हूं
हो सकता है कि आपके पास एक मॉड्यूल लोडर है जो "मददगार" defaultनिर्यात करता है जब कोई भी मौजूद नहीं होता है। मेरा मतलब है, लोग एक कारण के लिए मानक बनाते हैं, लेकिन मानकों की अनदेखी करना कभी-कभी मज़ेदार होता है और हम सोच सकते हैं कि यह एक अच्छी बात है।
MyConsumer.ts को इसमें बदलें :
import A from './a';
और allowSyntheticDefaultImportsकमांड-लाइन या tsconfig.jsonविकल्प निर्दिष्ट करें ।
ध्यान दें कि allowSyntheticDefaultImportsआपके कोड का रनटाइम व्यवहार बिल्कुल भी नहीं बदलता है। यह सिर्फ एक ध्वज है जो टाइपस्क्रिप्ट को बताता है कि आपका मॉड्यूल लोडर defaultकोई भी मौजूद होने पर निर्यात करता है। यह जादुई रूप से आपके कोड को नोडज में काम नहीं करेगा जब यह पहले नहीं था।
javascriptप्राथमिक टैग के रूप में हटाने और छोड़ने का सुझाव दूंगाecmascript-6, क्योंकि यहां प्राथमिक टैग हैtypescript। प्रश्न गलत तरीके से मानता है किexport =(एक TS सुविधा) के साथ जोड़ा जा सकता हैimport ... from, जबकि इसे साथ जोड़ा जाना चाहिएimport =। यह मूल रूप से ES6 मॉड्यूल आयात / निर्यात बनाम CJS / AMD है।