برنامه نویسی

تایپ اسکریپت (TypeScript) چیست و چه کاربردی دارد؟

تایپ‌اسکریپت (TypeScript) یک زبان برنامه‌نویسی کامپایلری، متن باز و چندسکویی است که توسط شرکت مایکروسافت توسعه داده شده و پشتیبانی می‌شود. این زبان یکی از زیرمجموعه‌های زبان جاوااسکریپت است و به شما کمک می‌کند کدهای خود را به روش ساده‌تری نوشته و پس از کامپایل، خروجی استاندارد جاوااسکریپت را بدست آورید. مایکروسافت با اضافه کردن امکانات پیشرفته‌ای به تایپ‌اسکریپت، آن را به زبان‌هایی مانند C# و جاوا نزدیک ساخته است. تایپ‌اسکریپت برای توسعه پروژه‌های بزرگ جاوااسکریپت طراحی شده است و فرآیند توسعه را به طرز قابل توجهی ساده‌تر می‌کند. امروزه تایپ‌اسکریپت به یکی از زبان‌های محبوب جهان تبدیل شده است و روز به روز بیشتر افراد را به خود جذب می‌کند. اما ممکن است این سوال برای شما نیز پیش بیاید که چرا باید تایپ‌اسکریپت را یاد بگیریم و استفاده و یادگیری آن چه مزایایی به همراه دارد؟ در ادامه این مقاله، به این سوالات پاسخ خواهیم داد و زبان تایپ‌اسکریپت و مزایا و امکانات آن را برای شما توضیح خواهیم داد. همراه ما باشید.

چرا یادگیری تایپ اسکریپت مهم است؟

یادگیری تایپ‌اسکریپت می‌تواند برای برنامه‌نویسان و توسعه‌دهندگان بسیار مفید و موثر باشد. در زیر تعدادی از مزایا و دلایل برای یادگیری تایپ‌اسکریپت آمده است:

  1. ایمنی و صحت کد: تایپ‌اسکریپت امکان تعریف نوع داده‌ها را در کد جاوااسکریپت فراهم می‌کند. این به شما کمک می‌کند تا در زمان کامپایل خطاهای نوع داده‌ها را شناسایی کنید و از بروز خطاهای عملکردی در زمان اجرا جلوگیری کنید. این ویژگی باعث افزایش صحت و قابلیت اطمینان کد می‌شود.
  2. پشتیبانی از ویژگی‌های جدید جاوااسکریپت: تایپ‌اسکریپت از ویژگی‌های جدیدی که در جاوااسکریپت اضافه شده‌اند، پشتیبانی می‌کند. با استفاده از تایپ‌اسکریپت، می‌توانید از جدیدترین مفاهیم و امکانات جاوااسکریپت مانند کلاس‌ها، ماژول‌ها و async/await بهره‌برداری کنید.
  3. قابلیت نوشتن کد سازگارتر و قابل‌تعمیم: با استفاده از تایپ‌اسکریپت، می‌توانید کدی بنویسید که قابلیت توسعه و پیشرفت را با حفظ سازگاری با کدهای قبلی داشته باشد. این به شما امکان می‌دهد که به راحتی کدهای جاوااسکریپت موجود را به تایپ‌اسکریپت تبدیل کرده و آن‌ها را بهبود دهید بدون اینکه نیاز به بازنویسی کامل کد داشته باشید.
  4. ابزارها و پشتیبانی قوی: تایپ‌اسکریپت از ابزارها و مجموعه‌های وسیعی برای توسعه کد، اشکال‌زدایی و مدیریت پروژه پشتیبانی می‌کند. این ابزارها و پشتیبانی‌ها شامل ویرایشگرهای کد با قابلیت تحلیل و نمایش خطاها، ابزارهای ساخت و پیکربندی پروژه، اشکال‌زدایی و تست کد و … است.
  5. جامعه و منابع غنی: تایپ‌اسکریپت دارای یک جامعه بزرگ و فعال از توسعه‌دهندگان است و منابع آموزشی و مستندات غنی برای یادگیری و استفاده وجود دارد. می‌توانید از تجربیات ودانشمندان دیگر استفاده کنید، به سوالات خود پاسخ دهید و با مشکلاتی که ممکن است در حین توسعه برنامه با آن‌ها روبرو شوید، راهنمایی شوید.

به طور کلی، یادگیری تایپ‌اسکریپت می‌تواند شما را در توسعه برنامه‌های پویا‌تر، قابل‌تعمیم‌پذیرتر و امن‌تر در محیط جاوا‌اسکریپت کمک کند. همچنین، با توجه به روند رو به رشد و محبوبیت تایپ‌اسکریپت، به عنوان یک برنامه‌نویس می‌توانید به راحتی با پروژه‌ها و تیم‌هایی همکاری کنید که از این زبان استفاده می‌کنند.

با توجه به مزایای فوق، یادگیری تایپ‌اسکریپت می‌تواند برای بهبود مهارت‌های برنامه‌نویسی شما و افزایش قابلیت‌های شغلیتان بسیار مفید باشد.

آموزش نصب TypeScript

برای نصب TypeScript، مراحل زیر را دنبال کنید:

  1. نصب نود جی اس (Node.js):
    TypeScript به Node.js نیاز دارد، بنابراین ابتدا باید Node.js را روی سیستم خود نصب کنید. می‌توانید نسخه مورد نظر را از وبسایت رسمی Node.js (https://nodejs.org) دانلود و نصب کنید.
  2. نصب TypeScript با استفاده از npm:
    پس از نصب Node.js، می‌توانید از npm (مدیر بسته Node.js) برای نصب TypeScript استفاده کنید. باز کنید یک ترمینال (یا پنجره دستور) و دستور زیر را اجرا کنید:
   npm install -g typescript
   ```

این دستور بسته TypeScript را به صورت سراسری (به طور مستقیم در سیستم عامل) نصب می‌کند. شما ممکن است نیازمند دسترسی مدیریتی (سیستم عامل) یا استفاده از دستور sudo (در لینوکس و مک) باشید.

  1. بررسی نصب:
    پس از اتمام عملیات نصب، می‌توانید با اجرای دستور زیر، نصب TypeScript را بررسی کنید:
   tsc --version

اگر نسخه TypeScript نمایش داده شود، نصب موفقیت آمیز بوده است.

  1. استفاده از TypeScript:
    حالا که TypeScript نصب شده است، می‌توانید از آن در پروژه‌های خود استفاده کنید. برای ایجاد یک پروژه TypeScript جدید، ایجاد یک فایل با پسوند .ts و شروع به نوشتن کد کنید. سپس می‌توانید از دستور زیر برای تبدیل کد TypeScript به کد جاوااسکریپت استفاده کنید:
   tsc 

این دستور یک فایل با پسوند .js ایجاد می‌کند که شامل کد جاوااسکریپت تبدیل شده از TypeScript است. از این پس، می‌توانید فایل جاوااسکریپت تولید شده را در مرورگر خود اجرا کنید.

این‌ها مراحل اصلی نصب TypeScript هستند و با اجرای این مراحل، شما آماده استفاده از TypeScript در پروژه‌های خود خواهید بود.

مشخص کردن نوع متغیرها در TypeScript

در TypeScript، انواع اصلی شامل String، Number، Boolean، Null، Undefined، Symbol و Void هستند. در این زبان، همه اعداد (صحیح، اعشاری و غیره) از نوع number هستند. همچنین، کلاس‌ها، آرایه‌ها، توابع و آبجکت‌ها نیز انواع فرعی در این زبان هستند.

در TypeScript، دو روش به نام Type Annotation و Type Inference برای تعیین نوع متغیرها وجود دارد. در روش Type Annotation، نوع متغیرها به صورت صریح تعیین می‌شود، در حالی که در روش Type Inference، TypeScript به طور خودکار نوع متغیرها را بر اساس مقادیری که به آنها اختصاص داده شده است، استنتاج می‌کند.

Type Annotation

Type Annotation یک روش در TypeScript است که به برنامه‌نویس امکان می‌دهد نوع داده‌های متغیرها و پارامترها را به طور صریح مشخص کند. با استفاده از Type Annotation، می‌توانید نوع داده‌ها را به صورت دستی تعیین کنید و TypeScript از این اطلاعات برای بررسی صحت کد و ارائه پیشنهادات خود استفاده می‌کند.

برای استفاده از Type Annotation، نوع داده را پس از نام متغیر یا پارامتر با علامت دو نقطه (:) مشخص می‌کنیم. به عنوان مثال:

let myVariable: string;
myVariable = "Hello TypeScript";

در این مثال، myVariable یک متغیر از نوع رشته (string) است و با استفاده از Type Annotation، این نوع داده به صورت صریح مشخص شده است. در صورتی که مقداری از نوع دیگری به myVariable اختصاص داده شود، TypeScript خطا را نشان می‌دهد.

همچنین، می‌توانید Type Annotation را برای پارامترها و بازگشتی‌ها در توابع نیز استفاده کنید:

function addNumbers(num1: number, num2: number): number {
  return num1 + num2;
}

در این مثال، تابع addNumbers دو پارامتر به نام num1 و num2 از نوع عدد (number) دارد و نوع بازگشتی آن نیز عدد است.

استفاده از Type Annotation در TypeScript امکان تبدیل کدهای جاوااسکریپت معمولی به TypeScript را نیز ممکن می‌سازد، زیرا می‌توانید نوع داده‌های موجود در کد جاوااسکریپت را به صورت صریح مشخص کنید.

می‌توانم Type Annotation را برای تمامی متغیرها و پارامترها در کد TypeScript استفاده کنم؟

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

با این حال، استفاده از Type Annotation برای تمامی متغیرها و پارامترها اجباری نیست. TypeScript قادر است با استفاده از Type Inference، نوع داده را بر اساس مقدار اولیه متغیرها و پارامترها استنتاج کند. این بدین معنی است که در صورتی که شما Type Annotation را برای یک متغیر یا پارامتر مشخص نکنید، TypeScript به صورت خودکار نوع داده را استنتاج می‌کند.

به طور کلی، استفاده از Type Annotation برای متغیرها و پارامترها که نیاز به صحت و دقت بیشتر در مورد نوع داده دارند، توصیه می‌شود. اما در مواردی که نوع داده قابل استنتاج است یا برای متغیرها و پارامترهایی که نوع داده آنها قابل تشخیص است و همچنین در مواردی که کد شما به صورت واضح و قابل فهم است، می‌توانید از Type Inference استفاده کنید و Type Annotation را حذف کنید.

Type Inference

Type Inference یک ویژگی در TypeScript است که به طور خودکار نوع داده‌ها را استنتاج می‌کند بر اساس مقادیری که به آنها اختصاص می‌دهید. با استفاده از Type Inference، شما نیازی به تعیین صریح نوع داده‌ها با استفاده از Type Annotation ندارید و TypeScript می‌تواند بر اساس مقادیر و عملکرد کد، نوع داده‌ها را تشخیص دهد.

به عنوان مثال، در کد زیر، Type Inference برای استنتاج نوع متغیر x از مقدار اولیه آن استفاده می‌کند:

let x = 5; // x is inferred as number

در این مثال، TypeScript به طور خودکار نوع داده متغیر x را به number تشخیص می‌دهد، زیرا مقدار اولیه آن عدد است.

همچنین، Type Inference در توابع نیز به کار می‌رود. در مثال زیر، TypeScript با استفاده از Type Inference نوع داده پارامتر و نوع بازگشتی تابع را تشخیص می‌دهد:

function multiply(a: number, b: number) {
  return a * b; // The return type is inferred as number
}

در این مثال، TypeScript بر اساس نوع داده پارامترها (عدد) و نوع مقدار بازگشتی (ضرب دو عدد نیز عدد است)، نوع بازگشتی تابع را به صورت خودکار به number استنتاج می‌کند.

استفاده از Type Inference می‌تواند کد را ساده‌تر و خواناتر کند، زیرا شما نیازی به تایپ کردن صریح همه متغیرها و پارامترها ندارید. با این حال، در برخی موارد، ممکن است نیاز به Type Annotation باشد، به عنوان مثال، زمانی که بخواهید نوع داده را به صراحت مشخص کنید و یا برای دستکاری‌های پیچیده‌تر نوع داده استفاده کنید.

چگونه می‌توانم از Type Inference در TypeScript برای تعیین نوع داده‌ها استفاده کنم؟

در TypeScript، شما برای استفاده از Type Inference، نیازی به انجام هیچ کار خاصی ندارید. TypeScript به طور خودکار از Type Inference برای استنتاج نوع داده‌ها استفاده می‌کند و نیازی به تعیین صریح نوع با استفاده از Type Annotation ندارید.

برای استفاده از Type Inference، شما مقداری را به یک متغیر یا پارامتر اختصاص دهید و TypeScript به طور خودکار نوع داده را استنتاج می‌کند. به عنوان مثال:

let x = 5; // x is inferred as number
let message = "Hello"; // message is inferred as string
let isActive = true; // isActive is inferred as boolean

در این مثال، TypeScript بر اساس مقادیر اولیه، نوع داده‌ها را به صورت خودکار استنتاج می‌کند. متغیر x به number، متغیر message به string و متغیر isActive به boolean استنتاج می‌شود.

همچنین، Type Inference در توابع نیز به کار می‌رود. در مثال زیر، TypeScript با استفاده از Type Inference، نوع داده پارامتر و نوع بازگشتی تابع را تشخیص می‌دهد:

function multiply(a, b) {
  return a * b; // The return type is inferred based on the multiplication of two values
}

let result = multiply(3, 4); // result is inferred as number

در این مثال، TypeScript با استنتاج نوع داده پارامترها (عدد) و نوع مقدار بازگشتی (ضرب دو عدد نیز عدد است)، نوع بازگشتی تابع را به صورت خودکار به number استنتاج می‌کند.

بنابراین، با استفاده از Type Inference در TypeScript، شما می‌توانید بدون تعیین صریح نوع داده‌ها کد بنویسید و TypeScript به طور خودکار نوع داده‌ها را استنتاج می‌کند. این به شما امکان می‌دهد کد را ساده‌تر و خواناتر نگه دارید.

تعریف کلاس در تایپ اسکریپت

در TypeScript، برای تعریف یک کلاس از کلیدواژه class استفاده می‌شود. کلاس‌ها در TypeScript امکاناتی مانند وراثت، اعضا (متغیرها و توابع) و مودیفایرها (public، private، protected) را ارائه می‌دهند. نمونه‌ای از تعریف یک کلاس در TypeScript به شکل زیر است:

class MyClass {
  private myProperty: string;
  public myMethod(): void {
    // Implementation
  }
}

در این مثال، ما یک کلاس به نام MyClass تعریف کرده‌ایم. کلاس شامل یک متغیر خصوصی (myProperty) و یک تابع عمومی (myMethod) است. مودیفایر private برای متغیر myProperty استفاده شده است، که به معنی این است که این متغیر فقط در داخل کلاس قابل دسترسی است. همچنین، مودیفایر public برای تابع myMethod استفاده شده است، که به معنی قابل دسترسی عمومی به این تابع است.

شما همچنین می‌توانید متغیرهای ورودی و خروجی توابع، همچنین نوع داده متغیرها و مقداردهی اولیه آنها را نیز مشخص کنید. در زیر یک مثال از این استفاده را می‌بینید:

class MyClass {
  private myProperty: string;

  constructor(initialValue: string) {
    this.myProperty = initialValue;
  }

  public myMethod(): void {
    console.log(this.myProperty);
  }
}

const myInstance = new MyClass("Hello");
myInstance.myMethod(); // Output: Hello

در این مثال، کلاس MyClass شامل یک سازنده (constructor) است که مقدار اولیه متغیر myProperty را از طریق ورودی initialValue دریافت می‌کند. سپس در تابع myMethod، مقدار myProperty را چاپ می‌کنیم. با ساخت یک نمونه از MyClass با استفاده از سازنده و فراخوانی تابع myMethod، خروجی “Hello” را دریافت می‌کنیم.

با استفاده از کلاس‌ها در TypeScript، می‌توانید ساختار و منطق برنامه‌های خود را به صورت شیء‌گرا سازماندهی کنید و از قابلیت‌های قدرتمند این زبان برنامه‌نویسی بهره‌برداری کنید.

می‌توانم در یک کلاس، از چندین متغیر و تابع استفاده کنم؟

بله، شما می‌توانید در یک کلاس از چندین متغیر و تابع استفاده کنید. کلاس‌ها در TypeScript به شما امکان می‌دهند تا گروهی از متغیرها و توابع را در یک واحد سازماندهی کنید.

در مثال زیر، یک کلاس به نام Person تعریف شده است که دارای متغیرهای name و age است و دو تابع به نام greet و getBirthYear نیز دارد:

class Person {
  private name: string;
  private age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  public greet(): void {
    console.log(`Hello, my name is ${this.name}`);
  }

  public getBirthYear(): number {
    const currentYear = new Date().getFullYear();
    return currentYear - this.age;
  }
}

const person = new Person("John", 30);
person.greet(); // Output: Hello, my name is John
console.log(person.getBirthYear()); // Output: 1992 (assuming the current year is 2022)

در این مثال، کلاس Person دارای متغیرهای name و age است که در سازنده مقداردهی اولیه می‌شوند. سپس، دو تابع greet و getBirthYear تعریف شده‌اند. تابع greet یک پیام معرفی را به کنسول چاپ می‌کند و تابع getBirthYear سال تولد شخص را بر اساس سن و تاریخ جاری محاسبه می‌کند و آن را به عنوان مقدار بازگشتی برمی‌گرداند.

شما می‌توانید به متغیرها و توابع کلاس از داخل کلاس (با استفاده از this) و بعد از ایجاد یک نمونه از کلاس (با استفاده از نام نمونه و نام متد) دسترسی داشته باشید.

با استفاده از کلاس‌ها، می‌توانید گروه‌بندی و سازماندهی بهتری را در کد خود داشته باشید و از ویژگی‌های شیء-گرایی و انتزاعیت برنامه‌نویسی بهره‌برداری کنید.

Interfaces ،Generics ,Inheritance و Method Access Modifiers در تایپ اسکریپت

در TypeScript، شما می‌توانید از ویژگی‌هایی مانند Interfaces (رابط‌ها)، Generics (ژنریک‌ها)، Inheritance (ارث‌بری) و Method Access Modifiers (مودیفایرهای دسترسی متد) استفاده کنید. این ابزارها به شما امکان می‌دهند کد خود را سازماندهی کنید و قابلیت‌های پیچیده‌تری را پیاده‌سازی کنید.

  1. Interfaces (رابط‌ها):
    رابط‌ها در TypeScript برای تعریف قراردادها و مشخص کردن ساختار داده‌ها استفاده می‌شوند. رابط‌ها می‌توانند شامل تعریف‌های متغیرها، توابع و توابع پراپرتی (property) باشند. شیء‌هایی که یک رابط را پیاده‌سازی کنند، باید تمامی عناصر مشخص شده در رابط را پیاده‌سازی کنند. نمونه‌ای از تعریف یک رابط به شکل زیر است:
   interface MyInterface {
     myProperty: string;
     myMethod(): void;
   }
   ```
  1. Generics (ژنریک‌ها):
    ژنریک‌ها در TypeScript به شما امکان می‌دهند که تعریف‌هایی را انعطاف‌پذیر کنید تا برای انواع داده‌های مختلف قابل استفاده باشند. با استفاده از ژنریک‌ها، می‌توانید تعیین کنید که یک تابع یا یک کلاس با یک نوع دلخواه کار کند. نمونه‌ای از استفاده از ژنریک‌ها در تابع به شکل زیر است:
   function identity(arg: T): T {
     return arg;
   }

   let result = identity("Hello");
   ```
  1. Inheritance (ارث‌بری):
    ارث‌بری در TypeScript به شما امکان می‌دهد یک کلاس را از یک کلاس دیگر گسترش دهید و ویژگی‌ها و عملکرد آن را به کلاس جدید اضافه کنید. کلاسی که از یک کلاس دیگر ارث‌بری می‌کند، می‌تواند ویژگی‌ها و توابع پدر را به همراه ویژگی‌ها و توابع خودش داشته باشد. نمونه‌ای از ارث‌بری در TypeScript به شکل زیر است:
   class ParentClass {
     myMethod(): void {
       console.log("Parent method");
     }
   }

   class ChildClass extends ParentClass {
     myOtherMethod(): void {
       console.log("Child method");
     }
   }

   let child = new ChildClass();
   child.myMethod(); // Output: Parent method
   child.myOtherMethod(); // Output: Child method
   ```
  1. Method Access Modifiers (مودیفایرهای دسترسی متد):
    مودیفایرهای دسترسی متد در TypeScript شامل public، private و protected هستند و برای تعیین سطحدسترسی متد‌ها در کلاس‌ها استفاده می‌شوند:
  • public: متد‌هایی که با public تعریف شده‌اند، به صورت عمومی در دسترس هستند و می‌توانند از داخل کلاس و همچنین از خارج از کلاس فراخوانی شوند. این مودیفایر به صورت پیش‌فرض برای متدها در TypeScript استفاده می‌شود.
  • private: متد‌هایی که با private تعریف شده‌اند، فقط در داخل کلاس قابل دسترسی هستند و از خارج از کلاس قابل فراخوانی نیستند. این مودیفایر برای محافظت از دسترسی مستقیم به ویژگی‌ها و توابع داخلی کلاس استفاده می‌شود.
  • protected: متد‌هایی که با protected تعریف شده‌اند، در داخل کلاس و همچنین در کلاس‌هایی که از آن ارث‌بری شده‌اند قابل دسترسی هستند، اما از خارج از کلاس قابل فراخوانی نیستند.

نمونه‌ای از استفاده از مودیفایرهای دسترسی متد در TypeScript به شکل زیر است:

class MyClass {
  public publicMethod(): void {
    console.log("This is a public method");
  }

  private privateMethod(): void {
    console.log("This is a private method");
  }

  protected protectedMethod(): void {
    console.log("This is a protected method");
  }
}

const myObject = new MyClass();
myObject.publicMethod(); // Output: This is a public method
myObject.privateMethod(); // Error: Property 'privateMethod' is private and only accessible within class 'MyClass'
myObject.protectedMethod(); // Error: Property 'protectedMethod' is protected and only accessible within class 'MyClass' and its subclasses

در این مثال، کلاس MyClass دارای سه متد است: publicMethod، privateMethod و protectedMethod. متد publicMethod با مودیفایر public تعریف شده است و به صورت عمومی در دسترس است. متد privateMethod با مودیفایر private تعریف شده است و فقط در داخل کلاس قابل دسترسی است. همچنین، متد protectedMethod با مودیفایر protected تعریف شده است و در کلاس MyClass و کلاس‌هایی که از آن ارث‌بری کرده‌اند قابل دسترسی است، اما از خارج از کلاس قابل فراخوانی نیست.

چگونه از ژنریک‌ها در تایپ اسکریپت استفاده کنم؟

در TypeScript، استفاده از ژنریک‌ها برای ایجاد قابل استفاده‌بودن توابع و کلاس‌ها برای انواع داده‌های مختلف است. این امکان را به شما می‌دهد تا تعیین کنید که یک تابع یا یک کلاس با یک نوع دلخواه کار کند، بدون اینکه نوع داده را به صورت صریح مشخص کنید. برای استفاده از ژنریک‌ها، شما می‌توانید از نماد <T> استفاده کنید، که T می‌تواند هر نام دلخواهی باشد. در زیر، چند نمونه از استفاده از ژنریک‌ها در TypeScript را بررسی می‌کنیم:

  1. استفاده از ژنریک در تابع:
    برای تعریف یک تابع ژنریک، از نماد <T> پس از نام تابع استفاده می‌کنیم. در بدنه تابع، می‌توانیم از T به عنوان نوع دلخواه استفاده کنیم. به عنوان مثال، تابع زیر مقدار ورودی را دریافت کرده و آن را به صورت رشته برمی‌گرداند:
   function printValue(value: T): string {
     return String(value);
   }

   let result = printValue(10); // نوع داده عددی
   console.log(result); // Output: "10"

   let anotherResult = printValue("Hello"); // نوع داده رشته
   console.log(anotherResult); // Output: "Hello"
   ```

   در این مثال، تابع `printValue` از ژنریک `T` استفاده می‌کند. ما این تابع را با دو نوع دلخواه مختلف (یک عدد و یک رشته) فراخوانی کرده‌ایم و نوع خروجی را بررسی کرده‌ایم.
  1. استفاده از ژنریک در کلاس:
    شما می‌توانید ژنریک‌ها را در تعریف کلاس نیز استفاده کنید. به عنوان مثال، کلاس زیر یک صندلی را نمایش می‌دهد و نوع دلخواه را دریافت می‌کند:
   class Chair {
     private seat: T;

     constructor(seat: T) {
       this.seat = seat;
     }

     getSeat(): T {
       return this.seat;
     }
   }

   let chair1 = new Chair("Leather"); // صندلی با نوع دلخواه رشته
   console.log(chair1.getSeat()); // Output: "Leather"

   let chair2 = new Chair(4); // صندلی با نوع دلخواه عددی
   console.log(chair2.getSeat()); // Output: 4
   ```

   در این مثال، کلاس `Chair` از ژنریک `T` برای تعیین نوع دلخواه صندلی استفاده می‌کند. ما دو نمونه از این کلاس را با دو نوع دلخواه مختلفیق از ژنریک‌ها در TypeScript به شما امکان می‌دهد تا کدهای قابل استفاده مجدد و انعطاف‌پذیرتری ایجاد کنید، زیرا می‌توانید کدهایی را بنویسید که برای انواع داده‌های مختلف کار کنند. با استفاده از ژنریک‌ها، می‌توانید کدهایی را بنویسید که قابلیت انعطاف را داشته باشند و تکرار مجدد کد را کاهش دهند.

برای استفاده از ژنریک‌ها در TypeScript، می‌توانید از نماد <T> استفاده کنید، که T می‌تواند هر نام دلخواهی باشد. این نماد به عنوان متغیر نوع در نظر گرفته می‌شود و می‌توانید آن را در تعریف توابع، کلاس‌ها و رابط‌ها استفاده کنید.

در زیر مثالی از استفاده از ژنریک‌ها در TypeScript را مشاهده می‌کنید:

// استفاده از ژنریک در تابع
function printArray(array: T[]): void {
  for (let item of array) {
    console.log(item);
  }
}

let numbers: number[] = [1, 2, 3, 4, 5];
printArray(numbers); // Output: 1 2 3 4 5

let names: string[] = ["John", "Jane", "Alice"];
printArray(names); // Output: John Jane Alice

// استفاده از ژنریک در کلاس
class Container {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

let numberContainer = new Container(10);
console.log(numberContainer.getValue()); // Output: 10

let stringContainer = new Container("Hello");
console.log(stringContainer.getValue()); // Output: Hello

در این مثال، تابع printArray از ژنریک T برای تعیین نوع داده‌های آرایه استفاده می‌کند. همچنین، کلاس Container نیز از ژنریک T برای تعیین نوع داده‌ی مقدار استفاده می‌کند. در هر دو مورد، ما می‌توانیم نوع داده مورد نظر را برای استفاده از ژنریک مشخص کنیم (مانند number و string) و از قابلیت استفاده مجدد و انعطاف‌پذیری این کدها بهره‌مند شویم.

می‌توانم ژنریک‌ها را در تعریف متغیرها نیز استفاده کنم؟

بله، شما می‌توانید ژنریک‌ها را در تعریف متغیرها نیز استفاده کنید. این قابلیت به شما امکان می‌دهد تا یک متغیر با نوع دلخواه تعریف کنید و سپس از آن در کدهای خود استفاده کنید. برای استفاده از ژنریک‌ها در تعریف متغیرها، می‌توانید نماد <T> را پس از نام متغیر استفاده کنید. در زیر، یک مثال از استفاده ژنریک در تعریف متغیر را مشاهده می‌کنید:

function getValue(value: T): T {
  return value;
}

let numberValue: number = getValue(10);
console.log(numberValue); // Output: 10

let stringValue: string = getValue("Hello");
console.log(stringValue); // Output: Hello

در این مثال، تابع getValue از ژنریک T برای تعیین نوع داده مقدار ورودی و خروجی استفاده می‌کند. ما دو متغیر numberValue و stringValue را با استفاده از ژنریک‌ها تعریف کرده‌ایم و از تابع getValue برای دریافت مقدار متغیرها استفاده کرده‌ایم. در نتیجه، مقادیر با نوع دلخواه متغیرها به ما برگردانده می‌شوند.

جمع بندی: چرا به TypeScript نیاز داریم؟

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

تجربه‌ی شما از کدنویسی با TypeScript چیست؟ آیا استفاده و یادگیری این زبان را به عنوان ضروری و مفید می‌دانید؟ لطفاً تجربیات خود را با ما در میان بگذارید.

پوریا گودرز

پوریا گودرز هستم‌ علاقه مند به مباحث‌ و‌‌ مشکلات مربوط به تکنولوژی و فناوری. همچنین اندک آشنایی در زمینه گرافیک دارم. امیدوارم بتونم مشکلات شما رو در این مباحث حل کنم . انتقادات خود را از بخش نظرات با من در میان بگذارید :)

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *