صفر تا صد Record Type در تایپ‌اسکریپت

Image

راهنمای جامع برای درک نوع Record در تایپ اسکریپت

تایپ‌اسکریپت (TypeScript) ابزارهای قدرتمندی برای تعریف دقیق انواع داده‌ها ارائه می‌دهد. یکی از این ابزارهای بسیار کاربردی، نوع Record است که برای ساختن نوع یک شیء (object) با مجموعه‌ای از کلیدها و مقادیر مشخص به کار می‌رود. این ابزار به شما کمک می‌کند تا کدی خواناتر و با ایمنی نوع (type-safe) بالاتری بنویسید، به‌خصوص هنگام کار با ساختارهایی مانند دیکشنری‌ها یا اشیائی با کلیدهای پویا.

سینتکس و کاربرد نوع Record

سینتکس اصلی Record بسیار ساده و قابل فهم است و به شکل زیر تعریف می‌شود:

type MyRecord = Record<Keys, Type>;

در این ساختار:

  • Keys: این پارامتر، نوع کلیدهای شیء را مشخص می‌کند. این نوع می‌تواند string، number، symbol یا یک یونیون (union) از مقادیر ثابت رشته‌ای یا عددی (literal types) باشد.
  • Type: این پارامتر نوع مقادیری را که به هر کلید اختصاص داده می‌شود، تعیین می‌کند.

برای مثال، اگر بخواهیم یک شیء برای نگهداری اطلاعات چند کاربر بر اساس نام کاربری آن‌ها تعریف کنیم، می‌توانیم از Record استفاده کنیم:

interface UserProfile {
  id: number;
  email: string;
}

const users: Record<string, UserProfile> = {
  john_doe: { id: 1, email: "john@example.com" },
  jane_doe: { id: 2, email: "jane@example.com" },
};

در اینجا، ما تضمین می‌کنیم که هر کلید در شیء users یک رشته است و مقدار متناظر با آن باید با اینترفیس UserProfile مطابقت داشته باشد.

مثالی پیشرفته‌تر با یونیون تایپ‌ها

قدرت واقعی Record زمانی مشخص می‌شود که از یونیون تایپ‌ها برای محدود کردن کلیدهای مجاز استفاده می‌کنیم. این کار از خطاهای ناشی از اشتباهات تایپی در نام کلیدها جلوگیری می‌کند.

type AppStatus = 'loading' | 'success' | 'error';

const statusMessages: Record<AppStatus, string> = {
  loading: "در حال بارگذاری اطلاعات...",
  success: "عملیات با موفقیت انجام شد.",
  error: "خطایی رخ داده است.",
};

در این قطعه کد، تایپ‌اسکریپت اطمینان حاصل می‌کند که شیء statusMessages فقط و فقط شامل سه کلید loading، success و error است.

تفاوت Record با ایندکس سیگنچر (Index Signature)

ممکن است ساختار Record<string, number> شما را به یاد ایندکس سیگنچرها مانند { [key: string]: number } بیندازد. در عمل، این دو بسیار شبیه به هم هستند و نوع یکسانی را تعریف می‌کنند. با این حال، استفاده از Record اغلب خواناتر و گویاتر تلقی می‌شود، زیرا به وضوح هدف شما یعنی ایجاد یک نگاشت (map) از کلید به مقدار را نشان می‌دهد و کد را برای توسعه‌دهندگان دیگر قابل فهم‌تر می‌کند.

مقایسه Record با Map

تفاوت کلیدی بین Record و Map در این است که Record یک ابزار زمان کامپایل (compile-time) برای تعریف نوع یک شیء جاوا اسکریپت ساده است. در مقابل، Map یک ساختار داده داخلی در جاوا اسکریپت (runtime) است که API مخصوص خود را دارد و متدهایی مانند .get()، .set() و .has() را برای مدیریت داده‌ها فراهم می‌کند. اگر به یک شیء ساده با کلیدهای از پیش تعریف‌شده نیاز دارید و نیازی به متدهای Map ندارید، Record انتخاب بهتری برای تضمین ایمنی نوع است.

نتیجه‌گیری

نوع Record در تایپ‌اسکریپت ابزاری ساده اما بسیار قدرتمند برای تعریف اشیاء با ساختار کلید-مقدار است. با استفاده از آن، می‌توانید نوع‌دهی کد خود را دقیق‌تر کرده، از بروز خطاها در زمان کامپایل جلوگیری کنید و خوانایی کد را برای خود و همکارانتان افزایش دهید. درک صحیح و استفاده به‌جا از Record به شما کمک می‌کند تا کدهای تایپ‌اسکریپت تمیزتر، ایمن‌تر و قابل اعتمادتری بنویسید.


Loading...