মূল কন্টেন্টে যান
মডিউল 4 · 2-এর পাঠ 2কোর্সে 8/14~15 min
মডিউল পাঠ (2/2)

ইউটিলিটি প্রকার

TypeScript সাধারণ টাইপ রূপান্তরের সুবিধার্থে বিভিন্ন গ্লোবাল ইউটিলিটি টাইপ প্রদান করে। এই প্রকারগুলি জেনেরিক এবং আপনাকে ঘোষণামূলকভাবে বিদ্যমান থেকে নতুন প্রকারগুলি তৈরি করার অনুমতি দেয়।

চারটি সর্বাধিক ব্যবহৃত ইউটিলিটি প্রকারগুলি হল:

1. Partial<T>

T ঐচ্ছিক প্রকারের সমস্ত বৈশিষ্ট্য তৈরি করে। এটি আপডেট/প্যাচ ফাংশনগুলির জন্য অত্যন্ত উপযোগী যেখানে কলার কেবলমাত্র ক্ষেত্রগুলির একটি উপসেট সরবরাহ করতে পারে:

TS
interface User {
  id: number;
  name: string;
  email: string;
}

// All properties of User become optional: { id?: number; name?: string; email?: string; }
type UserUpdate = Partial<User>;

2. Readonly<T>

একটি প্রকারের সমস্ত বৈশিষ্ট্য তৈরি করে T শুধুমাত্র। একটি সম্পত্তি পুনরায় বরাদ্দ করার কোনো প্রচেষ্টা একটি কম্পাইল-টাইম কম্পাইলার ত্রুটি ট্রিগার করবে:

TS
interface Point {
  x: number;
  y: number;
}

const p: Readonly<Point> = { x: 10, y: 20 };
// p.x = 5; // Error: cannot assign to 'x' because it is a read-only property

3. Pick<T, Keys>

টাইপ T থেকে শুধুমাত্র একটি নির্দিষ্ট সেট (একটি স্ট্রিং ইউনিয়ন দ্বারা উপস্থাপিত) নির্বাচন করে একটি প্রকার তৈরি করে:

TS
interface Article {
  id: number;
  title: string;
  content: string;
  views: number;
}

// Selects only 'title' and 'views': { title: string; views: number; }
type ArticlePreview = Pick<Article, 'title' | 'views'>;

4. Omit<T, Keys>

T টাইপ থেকে কীগুলির একটি নির্দিষ্ট সেট সরিয়ে একটি প্রকার তৈরি করে। এটি Pick এর দ্বৈত:

TS
interface Product {
  id: number;
  name: string;
  price: number;
  secretVendorCode: string;
}

// Removes 'secretVendorCode': { id: number; name: string; price: number; }
type PublicProduct = Omit<Product, 'secretVendorCode'>;

5. Record<Keys, Type>

একটি বস্তুর প্রকার তৈরি করে যার সম্পত্তি কীগুলি হল Keys এবং যার সম্পত্তির মানগুলি হল Type৷ এটি মানগুলির কী ম্যাপ করার জন্য অত্যন্ত উপযোগী, অভিধান বা হ্যাশ টেবিলের প্রতিনিধিত্ব করে (কী-মান মানচিত্র):

TS
type Page = 'home' | 'about' | 'contact';

interface PageInfo {
  title: string;
}

// Creates a dictionary with keys 'home' | 'about' | 'contact' and values PageInfo
const nav: Record<Page, PageInfo> = {
  home: { title: 'Home Page' },
  about: { title: 'About Us' },
  contact: { title: 'Contact Us' },
};

নিজে চেষ্টা করে দেখুন

অনুশীলনী 1: আংশিক সহ প্রোফাইল আপডেট

ব্যায়াম#ts.m4.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

আপডেটপ্রোফাইল ফাংশনটি সম্পূর্ণ করুন যা একটি আসল প্রোফাইল (প্রোফাইল) এবং একটি আপডেট অবজেক্ট (আপডেট) গ্রহণ করে যেখানে প্রোফাইলের সমস্ত ক্ষেত্র ঐচ্ছিক। এটি আপডেটের সাথে মূল বৈশিষ্ট্যগুলিকে একত্রিত করে একটি নতুন প্রোফাইল অবজেক্ট ফেরত দিতে হবে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

আপডেট প্যারামিটারের জন্য আংশিক&lt;প্রোফাইল&gt; ইউটিলিটি টাইপ এবং অবজেক্টগুলিকে মার্জ করতে স্প্রেড অপারেটর ব্যবহার করুন: { ...অরিজিনাল, ...আপডেট }।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 2: বাদ দিয়ে সংবেদনশীল ক্ষেত্র অপসারণ

ব্যায়াম#ts.m4.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

UserAccount টাইপ দেওয়া, SafeUser নামের একটি টাইপ উপনাম সংজ্ঞায়িত করুন যা সংবেদনশীল পাসওয়ার্ডহ্যাশ সম্পত্তি বাদ দেয়।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

টাইপ ব্যবহার করুন SafeUser = বাদ দিন <UserAccount, 'passwordHash'>; নির্দিষ্ট ক্ষেত্রটি বাদ দিতে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 3: পিক এবং রিডনলি সহ পাবলিক কনফিগ

ব্যায়াম#ts.m4.l2.e3
প্রচেষ্টা: 0লোড হচ্ছে...

AppConfig টাইপ দেওয়া, PublicConfig নামের একটি টাইপ উপনাম সংজ্ঞায়িত করুন যেটি শুধুমাত্র পঠনযোগ্য (পঠনযোগ্য) সংস্করণ যাতে পিক ব্যবহার করে নির্বাচিত শুধুমাত্র apiEndpoint এবং পোর্ট বৈশিষ্ট্য রয়েছে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ব্যবহার করুন প্রকার PublicConfig = পঠনযোগ্য <পিক<AppConfig, 'apiEndpoint' | 'পোর্ট'>>;

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম 4: রেকর্ড এবং শুধুমাত্র পঠন সহ ব্যবহারকারী রেজিস্ট্রি

ব্যায়াম#ts.m4.l2.e4
প্রচেষ্টা: 0লোড হচ্ছে...

ক্ষেত্র আইডি: নম্বর এবং নাম: স্ট্রিং সহ একটি ইউজার ইন্টারফেস দেওয়া, একটি টাইপ ReadOnlyUser তৈরি করুন যা সমস্ত ক্ষেত্রগুলিকে কেবলমাত্র ব্যবহারকারীর মধ্যে তৈরি করে। তারপর, একটি টাইপ UserRegistry তৈরি করুন যা একটি অভিধান উপস্থাপন করে যেখানে কীটি একটি স্ট্রিং (যেমন, স্ট্রিং আইডি) এবং মানটি একটি ReadOnlyUser।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

রেজিস্ট্রির জন্য ReadOnlyUser এবং Record<string, ReadOnlyUser> সংজ্ঞায়িত করতে Readonly<User> ব্যবহার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ