Vivasoft-logo

6.4 রি-এক্সপোর্টিং

কিছু বিশেষ ক্ষেত্রে আমাদের একটি মডিউল থেকে আরেকটি মডিউল এক্সটেন্ড করার প্রয়োজন হতে পারে যেখান থেকে ঐ মডিউলের সব ফিচার আমরা প্রকাশ করতে চাই না। এরকম কিছু কাজে রি-এক্সপোর্ট কাজে আসে।

এছাড়া এমন হতে পারে যে আমরা অনেকগুলো মডিউলের ফিচার একক একটি মডিউল থেকে এক্সপোর্ট করতে চাচ্ছি সে ক্ষেত্রেও কাজে আসে।

যেমন আমাদের যদি ২টা মডিউল থাকে module_a.ts এবং module_b.ts আর আমরা এদের ফিচার গুলো একটি মডিউল থেকে এক্সপোর্ট করতে চাই তাহলে:

				
					//feature/module_a.ts


export const stringConcat = (str1: string, str2: string): string => {
  return str1 + str2;
};


export const capitalizeFirstLetter=(str:string)=>{
  let capitalized = str.charAt(0).toUpperCase() + str.slice(1);
  return capitalized;
}

				
			
				
					//feature/module_b.ts


export class ZipCodeValidator {
  isValid(s: string) {
    return s.length === 5 && parseInt(s).toString() === s;
  }
}

				
			

এখন আমরা এটি ভিন্ন মডিউল(index.ts) থেকে এগুলো রি-এক্সপোর্ট করবো।

				
					//feature/index.ts

export { stringConcat } from './module_a';
export { ZipCodeValidator } from './module_b';
				
			

এখানে লক্ষণীয় যে, আমরা যদি কোন ফোল্ডারের ভিতরে index নাম দিয়ে কোন মডিউল রাখি তাহলে ঐখান থেকে কিছু ইম্পোর্ট করার সময় আলাদা করে ফাইলের নাম বলতে হয় না। ডিফল্ট ভাবে ফোল্ডারের পাথ দিলে সেটি index ফাইলকেই বুঝায়। যেমন এখানে যদি আমরা index.ts ফাইল থেকে রি-এক্সপোর্ট করা ডিক্লারেশন অন্য কোথাও ইম্পোর্ট করতে চাই এবং ধরি এই index ফাইলটি feature নামে ফোল্ডারের ভিতরে আছে তাহলে:

				
					//example-import.ts
import {ZipCodeValidator,stringConcat} from "../feature"
				
			

এখানে লক্ষ্য করলে দেখতে পাই যে যেহেতু আমরা ZipCodeValidator ক্লাস এবং stringConcat ফাংশন দুইটি index.ts ফাইল থেকে রি-এক্সপোর্ট করছি সেহেতু আমাদের আলাদা করে ফাইল পাথ index.ts ফাইলের নাম বলতে হয়নি, শুধু ফোল্ডারের  নাম বলাতেই হয়ে গিয়েছে। আর আমরা একই ফাইল থেকে দুইটা মডিউলের ফিচার রি-এক্সপোর্ট করাতে একই লাইনে দুইটা ফিচার ইম্পোর্ট করতে পারছি।

এখন আপনি যদি আরেকটু লক্ষ্য করেন তো দেখবেন যে module_a.ts মডিউলে আরো একটি ফাংশন আছে capitalizeFirstLetter, আমরা এটি index মডিউল থেকে এক্সপোর্ট করিনি কারন আমরা এটি এখান থেকে বাইরে প্রকাশ করতে চাচ্ছি না। এভাবে আমরা রি-এক্সপোর্ট ব্যবহার করে আমাদের ইম্পোর্টকে  আরো সহজ করে ফেলতে পারি।