৬.১ এক্সপোর্টিং এবং ইমপোর্টিং

মডিউল হচ্ছে একটা ফাইলে লোকাল স্কোপ তৈরি করার একটা পদ্ধতি। ECMAScript 2015 এর মত টাইপস্ক্রিপ্টে কোন ফাইলে যদি টপ লেভেল এ import অথবা export কীওয়ার্ড থাকে তাহলে সেটা মডিউল হিসেবে ধরা হয়।

মডিউলের এক্সিকিউশন এর নিজের স্কোপ এর মধ্যে হয় যেখানে স্ক্রিপ্ট গ্লোবাল স্কোপ এ রান হয়।

এক্সপোর্টিং

ভ্যারিয়েবল, ফাংশন, ক্লাস, টাইপ এলিয়াস, ইন্টারফেস অথবা যেকোন ধরনের ডিক্লারেশন এর প্রথমে export কীওয়ার্ড দিয়ে এক্সপোর্ট করা যায়। এক্সপোর্ট সাধারনত দুই ধরনের হয়ঃ

১.  Named এক্সপোর্ট

২. default এক্সপোর্ট

আমরা প্রথমে Named এক্সপোর্ট নিয়ে আলোচনা করবো

				
					//stringHandler.ts
export const numberRegexp = /^[0-9]+$/;


export class ZipCodeValidator{
  isValid(str: string): boolean {
    return str.length === 5 && numberRegexp.test(str);
  }
}

				
			

এখানে stringHandler.ts একটি মডিউল যেখান থেকে numberRegexp ভ্যারিয়েবল এবং ZipCodeValidator ক্লাসটি এক্সপোর্ট করা হয়েছে।

কোনো মডিউলের একটি ডিক্লারেশন আরেকটি মডিউলে ব্যবহার করতে হলে অবশ্যই সেটি আগে এক্সপোর্ট করতে হবে। এখানে আমরা যদি চাই তাহলে ক্লাসটি ভিন্ন একটি নাম দিয়েও এক্সপোর্ট করা সম্ভব। যেমনঃ

				
					//stringHandler.ts
export const numberRegexp = /^[0-9]+$/;


class ZipCodeValidator{
  isValid(str: string): boolean {
    return str.length === 5 && numberRegexp.test(str);
  }
}
export { ZipCodeValidator as zipValidate };
				
			

ইম্পোর্টিং

import কীওয়ার্ড এর মাধ্যমে আমরা অন্য একটি মডিউল থেকে কোন কিছু ইম্পোর্ট করতে পারি। এক্ষেত্রে ঐ মডিউল থেকে অবশ্যই আগে সেটি এক্সপোর্ট করা থাকতে হবে। 

এক্সপোর্ট এর মত একই ভাবে import কীওয়ার্ড ব্যবহার করা হয়। যেমনঃ

				
					//zipCode.ts
import {ZipCodeValidator} from "./test";

let valid = new ZipCodeValidator().isValid("asdasd");
				
			

আমরা চাইলে এক্সপোর্ট এর মত ইম্পোর্টও ভিন্ন একটা নাম দিয়ে করতে পারি। যেমনঃ

				
					//zipCode.ts
import { ZipCodeValidator as zipValidator } from './test';

let valid = new zipValidator().isValid('34672');
				
			

একটি মডিউল এর সব ভ্যারিয়েবল চাইলে একটা মাত্র ভ্যারিয়েবল হিসেবে ইম্পোর্ট করা যায়।

				
					//zipCode.ts
import * as validator from './test';

let valid = new validator.ZipCodeValidator().isValid('34672');
				
			

এখানে * দিয়ে বুঝানো হয় যে, আমরা মডিউলের সকল এক্সপোর্ট, ইম্পোর্ট করতে চাই  এবং as validator দিয়ে বুঝানো হচ্ছে সবকিছু validator ভ্যারিয়েবল হিসেবে ইম্পোর্ট হবে।

আমরা যদি একটি মডিউল থেকে টাইপ হিসেবে একটি ভ্যারিয়েবল ইম্পোর্ট করতে চাই তার জন্য TypeScript 3.8 থেকে import type সিন্ট্যাক্স  ব্যবহার করা যায়।  আমরা এভাবে কোন টাইপ ইম্পোর্ট করলে বিল্ড টাইম এ জাভাস্ক্রীপ্ট থেকে এই ইম্পোর্ট গুলো সয়ংক্রীয় ভাবে রিমুভ হয়ে যাবে, এক্ষেত্রে আমাদের babel বা এধরনের টুল ব্যবহার করতে হবে যা অপ্রয়জনীয় ইম্পোর্ট রিমুভ করে দিতে পারে।

				
					//zipCode.ts
import type { ZipCodeValidatorType } from './test';

let typVal: ZipCodeValidatorType;
				
			

TypeScript 4.5 থেকে আমরা একসাথে নরমাল ইম্পোর্ট এর সাথে টাইপ ইম্পোর্ট করতে পারি,

				
					//zipCode.ts
import { ZipCodeValidator, type ZipCodeValidatorType } from './test';

let typVal: ZipCodeValidatorType;

let valid = new ZipCodeValidator().isValid('34672');
				
			

এখানে আমরা প্রথম লাইন এ লক্ষ্য করলে দেখতে পাই যে,  ZipCodeValidator ক্লাস এবং ZipCodeValidatorType টাইপ একলাইনে ইম্পোর্ট করেছি কিন্তু ZipCodeValidatorType টি type কীওয়ার্ড দিয়ে টাইপ হিসেবে ইম্পোর্ট করা হয়েছে।