মডিউল পাঠ (2/2)
আক্ষরিক প্রকার এবং দাবী
TypeScript ভেরিয়েবলের সম্ভাব্য মানগুলিকে সংকুচিত করতে এবং প্রয়োজনে কম্পাইলারকে আরও নির্দিষ্ট ধরনের চিনতে বাধ্য করার জন্য উন্নত সরঞ্জাম সরবরাহ করে।
আক্ষরিক প্রকার
একটি আক্ষরিক প্রকার একটি সঠিক, একক মান (উদাহরণস্বরূপ, একটি নির্দিষ্ট স্ট্রিং বা সংখ্যা) উপস্থাপন করে। তারা সাধারণত ইউনিয়ন প্রকারের সাথে মিলিত হয়:
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;
light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLightপ্রকার দাবী (as)
কখনও কখনও আপনার কাছে এমন একটি ধরণের তথ্য থাকে যা কম্পাইলের সময় টাইপস্ক্রিপ্ট জানতে পারে না। এই ক্ষেত্রে, আপনি as কীওয়ার্ড ব্যবহার করে একটি টাইপ অ্যাসারশন ব্যবহার করতে পারেন:
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;দাবীটি কম্পাইলারকে বলে: "আমাকে বিশ্বাস করুন, আমি জানি এই উপাদানটি একটি HTMLCanvasElement"। এটি রানটাইমে কোনো চেক বা কাস্ট সঞ্চালন করে না; এটি শুধুমাত্র টাইপ চেকারকে সাহায্য করে।
কন্সট অ্যাসার্টেশন (as const)
যখন আমরা const দিয়ে কোনো বস্তু বা অ্যারে ঘোষণা করি, তখনও TypeScript এর অভ্যন্তরীণ বৈশিষ্ট্য পরিবর্তন করার অনুমতি দেয়। শেষে as const যোগ করার মাধ্যমে, সম্পূর্ণ কাঠামো হিমায়িত করা হয় এবং শুধুমাত্র পঠনযোগ্য করা হয়, সমস্ত বৈশিষ্ট্যকে তাদের সঠিক আক্ষরিক প্রকারে রূপান্তর করে:
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-onlyটেমপ্লেট আক্ষরিক প্রকার
টেমপ্লেট আক্ষরিক প্রকারগুলি জাভাস্ক্রিপ্ট টেমপ্লেট স্ট্রিংগুলির উপরে তৈরি করা হয়, তবে টাইপ পজিশনে ব্যবহৃত হয়। তারা একাধিক আক্ষরিক ধরনের একত্রিত করার অনুমতি দেয়:
type Size = 'small' | 'large';
type Color = 'red' | 'blue';
// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;টেমপ্লেট আক্ষরিক প্রকারে স্ট্রিং ইউটিলিটি
TypeScript টেমপ্লেট লিটারাল টাইপের মধ্যে অক্ষরগুলি পরিচালনা করার জন্য বিশেষ ইউটিলিটি প্রকার সরবরাহ করে:
Capitalize<StringType>: স্ট্রিং এর প্রথম অক্ষর বড় করে।Uncapitalize<StringType>: স্ট্রিংটির প্রথম অক্ষরটিকে বড় আকারের করা হয় না।Uppercase<StringType>: পুরো স্ট্রিংটিকে বড় হাতের অক্ষরে রূপান্তর করে।Lowercase<StringType>: সম্পূর্ণ স্ট্রিংটিকে ছোট হাতের অক্ষরে রূপান্তর করে।
type ActionType = 'click' | 'hover';
// Generates: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;নিজে চেষ্টা করে দেখুন
ব্যায়াম 1: দিকনির্দেশ আক্ষরিক ইউনিয়ন
নির্দেশনা নামে একটি আক্ষরিক প্রকার সংজ্ঞায়িত করুন যা শুধুমাত্র 'আপ', 'নিচে', 'বাম' বা 'ডান' স্ট্রিংগুলিকে গ্রহণ করে। তারপর move(dir: Direction) নামের একটি ফাংশন ঘোষণা করুন: স্ট্রিং যা প্রাপ্ত দিক অনুসরণ করে 'Moving' স্ট্রিং প্রদান করে।
ইঙ্গিত দেখান
| দ্বারা পৃথক করা চারটি বিকল্পের সাথে প্রথমে টাইপ উপনাম সংজ্ঞায়িত করুন, তারপর প্যারামিটার এবং রিটার্ন টাইপ টীকা করে মুভ ফাংশন ঘোষণা করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম 2: JSON.parse-এ দাবি
JSON.parse ফাংশন ডিফল্টভাবে যেকোনো ধরনের রিটার্ন করে। parseUser ফাংশনটি পরিবর্তন করুন যাতে JSON.parse(json) এর ফলাফল as কীওয়ার্ড ব্যবহার করে টাইপ { username: string } হিসাবে দাবি করা হয়।
ইঙ্গিত দেখান
JSON.parse(json) কলের পরপরই ' as { username: string }' যোগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
অনুশীলনী 3: ইভেন্টের জন্য টেমপ্লেট আক্ষরিক
স্ট্যাটাস এবং অ্যাকশনের ধরন দেওয়া, 'স্ট্যাটাস-অ্যাকশন' ফরম্যাটে ইভেন্ট নামে একটি টেমপ্লেট স্ট্রিং টাইপ সংজ্ঞায়িত করুন (উদাহরণস্বরূপ, 'ওপেন-ক্লিক')।
ইঙ্গিত দেখান
ধরনটি সংজ্ঞায়িত করতে ব্যাকটিক্স ব্যবহার করুন, এবং ভিতরে ${Status}-${Action} সিনট্যাক্স।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম 4: ক্যাপিটালাইজ সহ টেমপ্লেট লিটারাল টাইপ
একটি আক্ষরিক ধরনের ইভেন্ট সংজ্ঞায়িত করুন যা 'ক্লিক' বা 'হোভার' হতে পারে। তারপর, ক্যাপিটালাইজড ইভেন্ট নাম (যেমন, 'onClick' বা 'onHover') ফরম্যাটে স্ট্রিং প্রতিনিধিত্বকারী টাইপ EventHandler ঘোষণা করতে টেমপ্লেট লিটারাল টাইপ ব্যবহার করুন।
ইঙ্গিত দেখান
ইভেন্টের প্রথম অক্ষর বড় করতে টেমপ্লেট লিটারালের ভিতরে Capitalize<Event> ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ