فهرست سرفصل‌های TypeScript
خانه (Home) معرفی (Introduction) شروع سریع (Get Started) انواع ساده (Simple Types) تعریف صریح و استنتاج نوع (Explicit & Inference) انواع ویژه (Special Types) آرایه ها (Arrays) تاپل ها (Tuples) انواع شیء (Object Types) شمارشی ها (Enums) نام مستعار و اینترفیس ها (Aliases & Interfaces) انواع اتحادی (Union Types) توابع (Functions) تبدیل نوع (Casting) کلاس ها (Classes) جنریک های پایه (Basic Generics) انواع کاربردی (Utility Types) کلیدواژه keyof (Keyof) Null (Null) Definitely Typed (Definitely Typed) به روزرسانی های نسخه 5 (5 Updates) پیکربندی (Configuration) با Node.js (with Node.js) با React (with React) ابزارها (Tooling) انواع پیشرفته (Advanced Types) نگهبان های نوع (Type Guards) انواع شرطی (Conditional Types) انواع نگاشتی (Mapped Types) استنتاج نوع (Type Inference) انواع لیترال (Literal Types) فضای نام (Namespaces) امضاهای ایندکس (Index Signatures) ادغام اعلان ها (Declaration Merging) برنامه نویسی ناهمگام (Async Programming) دکوراتورها (Decorators) در پروژه های JS (in JS Projects) مهاجرت (Migration) مدیریت خطا (Error Handling) بهترین شیوه ها (Best Practices) ادیتور (Editor) تمرین ها (Exercises) آزمون (Quiz) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
TypeScript

TypeScript — جنریک های پایه (Basic Generics)

آخرین بروزرسانی: 1404/08/14

جنریک های پایه (Basic Generics)

جنریک تایپ اسکریپت یعنی «متغیر نوع». یعنی نوع را بعداً بدهیم. بنابراین کد ما قابل استفاده مجدد می شود و همچنین دقیق تر تایپ می شود.

توابع جنریک

تابع جنریک ورودی و خروجی را دقیق نگه می دارد. سپس اشتباهات کمتر می شود.

function createPair<S, T>(v1: S, v2: T): [S, T] {
  return [v1, v2];
}

console.log(createPair<string, number>("hello", 42));

مشاهده در ادیتور

کلاس های جنریک

کلاس جنریک داده را با هر نوعی نگه می دارد. اما همچنان تایپ ایمن می ماند.

class NamedValue<T> {
  private _value: T | undefined;

  public constructor(private name: string) {
  }

  public setValue(value: T): void {
    this._value = value;
  }

  public getValue(): T | undefined {
    return this._value;
  }

  public toString(): string {
    return `${this.name}: ${this._value}`;
  }
}

let value: NamedValue<number> = new NamedValue<number>("myNumber");
value.setValue(10);
console.log(value.toString());

مشاهده در ادیتور

نام مستعار نوع جنریک

با تایپ الیاس (Type Alias) می توان نوعِ قابل استفاده مجدد ساخت.

type Wrapped<T> = { value: T };

const wrappedValue: Wrapped<number> = { value: 10 };

مشاهده در ادیتور

مقدار پیش فرض جنریک

می توان برای جنریک مقدار پیش فرض گذاشت. سپس نوشتن کوتاه تر می شود.

class NamedValue<T = string> {
  private _value: T | undefined;

  public constructor(private name: string) {
  }

  public setValue(value: T): void {
    this._value = value;
  }

  public getValue(): T | undefined {
    return this._value;
  }

  public toString(): string {
    return `${this.name}: ${this._value}`;
  }
}

let value: NamedValue<string> = new NamedValue("myNumber");
value.setValue("myValue");
console.log(value.toString());

مشاهده در ادیتور

قیود با extends

قید یعنی محدودیت نوع. بنابراین فقط نوع های مجاز پذیرفته می شوند.

function createLoggedPair<S extends string | number, T extends string | number>(v1: S, v2: T): [S, T] {
  console.log(`creating pair: v1='${v1}', v2='${v2}'`);
  return [v1, v2];
}

مشاهده در ادیتور

گام های عملی

  1. اول امضای تابع جنریک را بنویس.
  2. بعد نوع پارامترها و خروجی را دقیق کن.
  3. سپس در صورت نیاز قید و پیش فرض بده.

همچنین برای تکمیل مطالعه، صفحه توابع و کلاس ها را ببین. برای ادامه جنریک های تایپ اسکریپت به ابزارهای کمکی برو.

جمع بندی سریع

  • جنریک یعنی نوع را بعداً مشخص کن.
  • تابع جنریک خروجی دقیق تری می دهد.
  • کلاس جنریک انعطاف بالاتری دارد.
  • قید با extends جلوی خطا را می گیرد.
  • پیش فرض نوشتن را ساده تر می کند.