2.2 এনি টাইপ
any টাইপ এটা আসলে কোন ডাটা টাইপ না, টাইপস্ক্রিপ্টে এটি একটি স্পেশাল ডাটা টাইপ, যেটা আসলে সকল ধরনের ডাটা টাইপকে একসেপ্ট করতে পারে, মানে আমরা যখন কোন any টাইপ ডাটা ভ্যারিয়েবল এর ভিতর ভিন্ন টাইপের ডাটা অ্যাসাইন করবো, টাইপস্ক্রিপ্টে কম্পাইলার তখন আর টাইপ চেকিং করেনা। তাই আমাদের কোড লেখার সময় এমন কোন পরিস্থিতিতে পড়তে পারি যখন আসলে ডাটার টাইপ আমাদের অজানা অথবা হতে পারে সেটা থার্ড পার্টি লাইব্রেরি অথবা কোন এপিআই থেকে আসা ডাটা, সেক্ষেত্রে আমরা any টাইপ ব্যবহার করতে পারি।
let anyData: any;
//or
let anyData; // typescript automatic defined as any type
anyData = 12;
anyData = "12";
anyData = [12];
anyData = {
id: 12
};
const res: any = api.getDataSomeWhere(); //api call
এখানে res-এ যে ডাটা আমরা পাবো সেটা আমাদের অজানা, বা উপরে আমরা anyData-এর ভিতরে অনেক ধরনের ডাটা অ্যাসাইন করেছি। এক্ষেত্রে আমাদের কোড লেখার সময় অনেক কনফিউশন তৈরী হতে পারে বা কোড-এ আমাদের অনেক ভুল থেকে যেতে পারে।
যেমন: res.name দিয়ে যদি আমরা কোন ডাটা দেখতে চাই বা anyData.name দিয়ে দেখতে চাই তাহলে কিন্তু আমাদের এরর দেখাবে, কারন কম্পাইলার জানেই না যে ডাটা আমরা এক্সেস করছি বা প্রিন্ট করতে চাচ্ছি সেটার টাইপ কি অথবা আদৌ আছে কিনা।
আবার ধরুন আমরা একটা ফাংশন লিখবো যেটা আসলে আমাদের দুইটা নাম্বারকে যোগ করে রিটার্ন করবে।
function calculateNumber(number1: any, number2: any){
let sum: any = number1 + number2;
return sum;
}
const result = calculateNumber(2,"10");
console.log(result)
// output "210"
আমরা আউটপুট হিসাবে “210” পেয়েছি কিন্তু আমাদের পাওয়ার কথা ছিল 12, তাহলে কি কোড ভুল আউটপুট দিচ্ছে? না কোড সঠিক আউটপুটই দিয়েছে, ভুল করেছি আমরা , দেখুন আমরা যখন ফাংশন কল করেছি তখন দ্বিতীয় প্যারামিটার আমরা নাম্বার না দিয়ে স্ট্রিং ভ্যালু দিয়েছি তাই ফাংশন ২ এর সাথে ১০ স্ট্রিং হিসাবে যোগ করে আমাদের স্ট্রিং ভ্যালু ২১০ রিটার্ন করেছে। তাই ফাংশনের প্যারামিটার আমরা যদি any টাইপ না দিয়ে number টাইপ দিতাম তাহলে কিন্তু ফাংশন কল করার সময় আমাদের কম্পাইল টাইমেই এরর দেখাতো এবং আমরা সঠিক আউটপুট পেতাম আবার আমাদের কোডে কোনো ভুল থাকতো না।
এখন কথা হচ্ছে আমাদের টাইপস্ক্রিপ্ট ব্যাবহার করার উদ্দেশ্য হল টাইপ সেফটির জন্য, যেন আমাদের কোড এ কোনো ভুল বা কোড লেখার সময় কোনো কনফিউশন তৈরী না হয়, তাই বেস্ট প্রাকটিস হল টাইপ ডিফাইন করে নেওয়া এবং any টাইপ এভোয়েড করা।