ডিফল্ট রফতানি ( 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