डिफ़ॉल्ट निर्यात ( export default
)
// MyClass.ts -- using default export
export default class MyClass { /* ... */ }
मुख्य अंतर यह है कि आपके पास प्रति फ़ाइल केवल एक डिफ़ॉल्ट निर्यात हो सकता है और आप इसे इस तरह आयात करते हैं:
import MyClass from "./MyClass";
आप इसे अपनी पसंद का कोई भी नाम दे सकते हैं। उदाहरण के लिए यह ठीक काम करता है:
import MyClassAlias from "./MyClass";
नामांकित निर्यात ( export
)
// MyClass.ts -- using named exports
export class MyClass { /* ... */ }
export class MyOtherClass { /* ... */ }
जब आप एक नामित निर्यात का उपयोग करते हैं, तो आपके पास प्रति फ़ाइल कई निर्यात हो सकते हैं और आपको ब्रेसिज़ में घिरे निर्यात को आयात करने की आवश्यकता होती है:
import { MyClass } from "./MyClass";
नोट: ब्रेसिज़ जोड़ना आपके प्रश्न में वर्णित त्रुटि को ठीक कर देगा और ब्रेसिज़ में निर्दिष्ट नाम को निर्यात के नाम से मेल खाना चाहिए।
या कहें कि आपकी फ़ाइल कई वर्गों को निर्यात करती है , तो आप दोनों को आयात कर सकते हैं:
import { MyClass, MyOtherClass } from "./MyClass";
// use MyClass and MyOtherClass
या आप इस फ़ाइल में दोनों को अलग नाम दे सकते हैं:
import { MyClass, MyOtherClass as MyOtherClassAlias } from "./MyClass";
// use MyClass and MyOtherClassAlias
या आप वह सब कुछ आयात कर सकते हैं जिसका उपयोग करके निर्यात किया जाता है * as
:
import * as MyClasses from "./MyClass";
// use MyClasses.MyClass and MyClasses.MyOtherClass here
कौन सा उपयोग करें?
ES6 में, डिफ़ॉल्ट निर्यात संक्षिप्त हैं क्योंकि उनका उपयोग मामला अधिक सामान्य है ; हालाँकि, जब मैं टाइपस्क्रिप्ट में किसी प्रोजेक्ट के लिए कोड आंतरिक पर काम कर रहा हूं, तो मैं लगभग हर समय डिफ़ॉल्ट निर्यात के बजाय नामित निर्यात का उपयोग करना पसंद करता हूं क्योंकि यह कोड रीफैक्टरिंग के साथ बहुत अच्छी तरह से काम करता है। उदाहरण के लिए, यदि आप डिफ़ॉल्ट रूप से एक वर्ग का निर्यात करते हैं और उस वर्ग का नाम बदल देते हैं, तो यह केवल उस फ़ाइल में कक्षा का नाम बदलेगा और अन्य फ़ाइलों में किसी भी अन्य संदर्भ का नहीं। नामित निर्यात के साथ यह अन्य सभी फाइलों में वर्ग और सभी संदर्भों का नाम बदल देगा।
यह बैरल फाइलों के साथ बहुत अच्छी तरह से खेलता है (फाइलें जो नेमस्पेस export *
निर्यात का उपयोग करती हैं- -तैयार अन्य फाइलें)। इसका एक उदाहरण इस उत्तर के "उदाहरण" खंड में दिखाया गया है ।
ध्यान दें कि केवल एक निर्यात होने पर भी नामांकित निर्यात का उपयोग करने पर मेरी राय टाइपस्क्रिप्ट हैंडबुक के विपरीत है - "लाल झंडे" खंड। मेरा मानना है कि यह सिफारिश केवल तब लागू होती है जब आप अन्य लोगों के उपयोग के लिए एक एपीआई बना रहे होते हैं और कोड आपके प्रोजेक्ट के लिए आंतरिक नहीं होता है। जब मैं लोगों के उपयोग के लिए एक एपीआई डिजाइन कर रहा हूं, तो मैं एक डिफ़ॉल्ट निर्यात का उपयोग करूंगा ताकि लोग कर सकें import myLibraryDefaultExport from "my-library-name";
। यदि आप ऐसा करने के बारे में मुझसे असहमत हैं, तो मुझे आपका तर्क सुनना अच्छा लगेगा।
उस ने कहा, जो आप पसंद करते हैं उसे पाएं! आप एक ही समय में एक, दूसरे या दोनों का उपयोग कर सकते हैं।
अतिरिक्त अंक
एक डिफ़ॉल्ट निर्यात वास्तव में नाम के साथ एक नामित निर्यात है default
, इसलिए यदि फ़ाइल में डिफ़ॉल्ट निर्यात होता है, तो आप यह करके भी आयात कर सकते हैं:
import { default as MyClass } from "./MyClass";
और ध्यान दें कि आयात करने के लिए ये अन्य तरीके मौजूद हैं:
import MyDefaultExportedClass, { Class1, Class2 } from "./SomeFile";
import MyDefaultExportedClass, * as Classes from "./SomeFile";
import "./SomeFile"; // runs SomeFile.js without importing any exports