Vivasoft-logo

3.4 লিটারেল টাইপ

টাইপস্ক্রিপ্টে ইতিমধ্যে অনেক টাইপ সম্পর্কে জানলেন। এখন আবার লিটারেল টাইপ কি? চিন্তার কারণ নেই। তেমন কঠিন কিছু নয়।  

বইয়ের ভাষায় বলতে গেলে লিটারেল কোডে ভ্যালু সরাসরি প্রতিষ্ঠিত করতে ব্যবহার করা হয়। এটি নিজস্ব ভ্যালু অথবা নির্দিষ্ট ভ্যালু প্রকাশের পদ্ধতি।  এবার আমাদের ভাষায় কিছু উদাহরণের মাধ্যমে ভেঙে বলি চলেন।

				
					 let name: 'Rakib';
 name = 'Anisul'; // Error: "Anisul" is not assignable to type "Rakib"
				
			

এখান থেকে কি বুঝলেন?

একটি ভ্যারিয়েবল ‘name’ যার টাইপ হিসেবে ডাইরেক্ট ভ্যালু ‘Rakib’ এসাইন করা হয়েছে।  এখন এই ভ্যারিয়েবলের মধ্যে ‘Rakib’ ছাড়া অন্য কিছু আমরা এসাইন করতে পারবো না।  

কথা হলো এরকম পাগলামির দরকার কি ছিল? string টাইপ ব্যবহার  করলেই হতো না? সেখানে আরেকটা চেক বসিয়ে শুধু যেটা দরকার সেই নামটা এসাইন করলেই তো হতো ? 

আসেন এবার তাও এক নজরে দেখে ফেলি।

আমরা যখন কোড করি তা হাজার লাইনের হয়ে থাকে। কোড এর শুরুতে এমন কিছু লাইন আছে ধরে নিলাম।

				
					 type DrivingDirection = "North" | "East" | "South" | "West";
 function drive(direction: DrivingDirection) {
    // ...
 }
 drive("North"); // Okay
 drive("Nurth"); // Error!
				
			

কয়েকশো লাইন পরে গিয়ে যদি কেউ ‘drive’ ফাংশন কল করে এবং কোনো কারণে ভুল বানানের প্যারামিটার দিয়ে ফেলে, টাইপস্ক্রিপ্ট কম্পাইলার সাথে সাথে এরর দেখাবে।

এবার আরেকটি উদাহরণ দেখা যাক:

				
					function buyCar(car: 'toyota') {
  // ...
 }
  const newCar = {
    carModel: 'toyota'
  };
  buyCar(newCar.carModel); // Error: Argument of type string is not assignable to parameter of type 'toyota'

				
			

কিন্তু এখানে এমন এরর দেখানোর কারণ কি কেউ বলতে পারবেন?

এখানে একটা অবজেক্ট ‘newCar’ যার একটা প্রপার্টি ‘carModel’ যার মধ্যে string টাইপের ভ্যালু এসাইন করা হয়েছে (‘toyota’ টাইপের নয়) তাই যখন buyCar ফাংশনে আর্গুমেন্ট হিসেবে newCar.carModel পাঠানো হয়, যে কিনা ‘toyota’  টাইপের প্যারামিটার এক্সপেক্ট করছে সেখানেই সমস্যা দেখা দেয়। 

এখন এখান থেকে উত্তরণের উপায় কি? দেখি বের করার চেষ্টা করি।

				
					function buyCar(car: 'toyota') {
    // ...
   }
  const newCar = {
    carModel: 'toyota' as 'toyota' 
  };
  buyCar(newCar.carModel); // Okay!