Type Alias یکی از ویژگی‌های قدرتمند تایپ اسکریپت است که به توسعه‌دهندگان اجازه می‌دهد تا نام‌های سفارشی برای تایپ‌هایی که دارند ایجاد کنند و خوانایی و قابلیت نگه‌داری کد خود را افزایش دهند. در این مقاله قصد داریم تا type alias در تایپ اسکریپت را با کمک چند مثال بررسی کنیم.

منظور از Type Alias در تایپ اسکریپت چیست؟

Type Alias در تایپ اسکریپت، یک رویکرد ساده برای تعریف نام‌های سفارشی برای تایپ‌های موجود ارائه می‌دهد، در نتیجه وضوح کد و قابلیت نگه‌داری آن را تقویت می‌کند. سینتکس آن به صورت زیر می‌باشد:

type AliasName = TypeDefinition;

در این مثال، AliasName نام سفارشی اختصاص داده شده به تایپ را نشان می‌دهد، در حالی که TypeDefinition ساختار تایپ مورد نظر را مشخص می‌کند. type aliasها بسیار منعطف هستند و انواع مختلفی از جمله primitiveها، تایپ‌های آبجکت، تایپ‌های union و function signatureها را در خود جای می‌دهند.

مثال‌های از مفهوم Type Alias در تایپ اسکریپت

نحوه استفاده از alias User ID

// Alias for User ID
type UserID = number;

// Usage
function getUserByID(id: UserID): User {
    // Implementation to fetch user by ID
    console.log("Fetching user with ID:", id);
    return {} as User; // Dummy return for demonstration
}

// Test
const user = getUserByID(123);
console.log("Fetched user:", user);

در این مثال، UserID به عنوان type alias نشان دهنده شناسه‌های عددی برای کاربران است. با استفاده مستقیم از alias UserID به جای number ، کدی که داریم self-descriptiveتر می‌شود.

هنگام تعریف توابعی مانند getUserByID، توسعه‌دهندگان بلافاصله متوجه می‌شوند که این تابع یک ID به عنوان آرگومان دریافت می‌کند، در نتیجه خوانایی کد افزایش پیدا می‌کند و هدف مورد نظر به طور موثر منتقل می‌شود.

نحوه استفاده از Alias Post

// Alias for Post
type Post = {
    title: string;
    content: string;
    author: Username;
};

// Usage
const newPost: Post = {
    title: "Introduction to TypeScript Type Aliases",
    content: "In this article, we explore TypeScript type aliases...",
    author: "dev_guru_123",
};

// Test
console.log("New post:", newPost);

در این مثال، type alias Post ساختار یک پست که شامل title، content و author می‌شود را دربر می‌گیرد. با استفاده از alias Post، کد به طور شفاف ساختار یک آبجکت پست را به اشتراک می‌گذارد. پس از مواجهه با متغیرهایی مانند newPost، توسعه‌دهندگان به طور مستقیم ویژگی‌های پیش‌بینی شده را مشاهده می‌کنند.

نحوه استفاده از Alias Math Operation

// Alias for MathOperation
type MathOperation = (x: number, y: number) => number;

// Usage
const add: MathOperation = (x, y) => x + y;
const subtract: MathOperation = (x, y) => x - y;

// Test
console.log("Addition result:", add(5, 3));
console.log("Subtraction result:", subtract(8, 3));

در این قسمت، alias MathOperation تابعی را نشان می‌دهد که دو عدد ( x و y ) را به عنوان پارامترهای ورودی دریافت می‌کند و به عنوان خروجی، یک عدد را محاسبه می‌کند.

با استفاده از alias MathOperation، کد به طور مشخص signature عملیات ریاضی مورد انتظار را به اشتراک می‌گذارد. هنگام تعریف توابعی مانند add یا subtract، توسعه‌دهندگان به سرعت انتظارات ورودی و خروجی را درک می‌کنند و در نتیجه تعریف تابع ساده‌تر می‌شود.

نحوه استفاده از Type Alias Union

// Alias for Result
type Result = Success | Error;

// Define Success and Error types (for demonstration purposes)
class Success {
    constructor(public data: any) {}
}

class Error {
    constructor(public message: string) {}
}

// Usage
const successResult: Result = new Success("Data loaded successfully");
const errorResult: Result = new Error("Failed to load data");

// Test
function handleResult(result: Result) {
    if (result instanceof Success) {
        console.log("Success:", result.data);
    } else {
        console.error("Error:", result.message);
    }
}

handleResult(successResult); // Output: Success: Data loaded successfully
handleResult(errorResult);   // Output: Error: Failed to load data

در این مثال، alias Result نشان دهنده یک تایپ union است که شامل Success و Error می‌باشد. تابع handleResult منتظر پارامتری از نوع Result است که ممکن است به صورت Success یا Error ظاهر شود. با استفاده از alias Result، کدی که داریم به طور مشخص نتایج بالقوه یک عملیات را مشخص می‌کند، درک کد را آسان‌تر کرده‌ همینطور قابلیت استفاده مجدد و نگه‌داری آن را هم تقویت می‌نماید.

نحوه Extend کردن Type Aliasها

// Base Alias for User
type BaseUser = {
    id: UserID;
    username: string;
    email: string;
};

// Extended Alias for Admin User
type AdminUser = BaseUser & {
    role: "admin";
};

// Usage
const admin: AdminUser = {
    id: 1,
    username: "admin",
    email: "admin@example.com",
    role: "admin",
};

// Test
console.log("Admin user:", admin);

در این مثال، alias BaseUser ویژگی‌های مشترک کاربر را دربر می‌گیرد. با extend کردن alias BaseUser، یک تایپ AdminUser ایجاد می‌کنیم و یک ویژگی دیگر به نام role را به آن اختصاص می‌دهیم.  این کار، تعریف تعاریف تایپ‌های تخصصی را در عین حفظ ثبات و وضوح کد، امکان‌پذیر می‌کند.

جمع‌بندی

type alias در تایپ اسکریپت با ارائه نام‌های سفارشی برای تایپ‌های مختلف قابلیت خوانایی و نگه‌داری کد را بهبود می‌بخشد. type aliasها با روشن کردن هدف کد و ساده کردن ساختار آن، توسعه را آسان‌تر می‌کنند و کیفیت کلی نرم افزار را افزایش می‌دهند. توصیه می‌شود برای این که پایگاه‌های کد تمیزتر با قابلیت نگه‌داری بالاتر داشته باشیم از type aliasها استفاده کنیم.