تایپاسکریپت (TypeScript) ابزارهای قدرتمندی برای تعریف دقیق انواع دادهها ارائه میدهد. یکی از این ابزارهای بسیار کاربردی، نوع Record است که برای ساختن نوع یک شیء (object) با مجموعهای از کلیدها و مقادیر مشخص به کار میرود. این ابزار به شما کمک میکند تا کدی خواناتر و با ایمنی نوع (type-safe) بالاتری بنویسید، بهخصوص هنگام کار با ساختارهایی مانند دیکشنریها یا اشیائی با کلیدهای پویا.
سینتکس اصلی Record بسیار ساده و قابل فهم است و به شکل زیر تعریف میشود:
type MyRecord = Record<Keys, Type>;
در این ساختار:
string، number، symbol یا یک یونیون (union) از مقادیر ثابت رشتهای یا عددی (literal types) باشد.برای مثال، اگر بخواهیم یک شیء برای نگهداری اطلاعات چند کاربر بر اساس نام کاربری آنها تعریف کنیم، میتوانیم از 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<string, number> شما را به یاد ایندکس سیگنچرها مانند { [key: string]: number } بیندازد. در عمل، این دو بسیار شبیه به هم هستند و نوع یکسانی را تعریف میکنند. با این حال، استفاده از Record اغلب خواناتر و گویاتر تلقی میشود، زیرا به وضوح هدف شما یعنی ایجاد یک نگاشت (map) از کلید به مقدار را نشان میدهد و کد را برای توسعهدهندگان دیگر قابل فهمتر میکند.
تفاوت کلیدی بین Record و Map در این است که Record یک ابزار زمان کامپایل (compile-time) برای تعریف نوع یک شیء جاوا اسکریپت ساده است. در مقابل، Map یک ساختار داده داخلی در جاوا اسکریپت (runtime) است که API مخصوص خود را دارد و متدهایی مانند .get()، .set() و .has() را برای مدیریت دادهها فراهم میکند. اگر به یک شیء ساده با کلیدهای از پیش تعریفشده نیاز دارید و نیازی به متدهای Map ندارید، Record انتخاب بهتری برای تضمین ایمنی نوع است.
نوع Record در تایپاسکریپت ابزاری ساده اما بسیار قدرتمند برای تعریف اشیاء با ساختار کلید-مقدار است. با استفاده از آن، میتوانید نوعدهی کد خود را دقیقتر کرده، از بروز خطاها در زمان کامپایل جلوگیری کنید و خوانایی کد را برای خود و همکارانتان افزایش دهید. درک صحیح و استفاده بهجا از Record به شما کمک میکند تا کدهای تایپاسکریپت تمیزتر، ایمنتر و قابل اعتمادتری بنویسید.