TypeScript generics asoslari


Genericlar classlar, funksiyalar va turdagi taxalluslarni yaratish uchun ishlatilishi mumkin bo‘lgan "tur o‘zgaruvchilari" ni yaratishga imkon beradi, ular foydalanadigan turlarni aniq belgilashga hojat yo‘q.

Genericlar qayta foydalanish mumkin bo‘lgan kodni yozishni osonlashtiradi.

ULASHISH

Funksiyalar

Funksiyalarga ega bo‘lgan genericlar kiritish va qaytarish turlarini aniq ifodalovchi umumiyroq funksiyalarni yaratishga yordam beradi.

Misol

function createPair<S, T>(v1: S, v2: T): [S, T] {
  return [v1, v2];
}
console.log(createPair<string, number>('hello', 42)); // ['hello', 42]
O‘zingiz sinab ko‘ring »

TypeScript shuningdek, funksiya parametrlaridan umumiy parametr turini ham chiqarishi mumkin.


Sinflar

Generics Map kabi umumlashtirilgan sinflarni yaratish uchun ishlatilishi mumkin.

Misol

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

  constructor(private name: string) {}

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

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

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

let value = new NamedValue<number>('myNumber');
value.setValue(10);
console.log(value.toString()); // myNumber: 10
O‘zingiz sinab ko‘ring »

TypeScript, agar u konstruktor parametrida ishlatilsa, umumiy parametr turini ham aniqlashi mumkin.



Taxalluslarni kiriting

Turdagi taxalluslardagi genericlar ko‘proq qayta foydalanish mumkin bo‘lgan turlarni yaratishga imkon beradi.

Misol

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

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

Bu quyidagi sintaksisli interfacelar bilan ham ishlaydi: interface Wrapped<T> {

Standart qiymat

Agar boshqa qiymat ko‘rsatilmagan yoki xulosa chiqarilmagan bo‘lsa, umumiy qiymatlar qo‘llanilishi mumkin.

Misol

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

  constructor(private name: string) {}

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

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

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

let value = new NamedValue('myNumber');
value.setValue('myValue');
console.log(value.toString()); // myNumber: myValue

Uzayadi

Ruxsat etilgan narsalarni cheklash uchun generiklarga cheklovlar qo‘shilishi mumkin.

Cheklovlar umumiy turdan foydalanganda aniqroq turga tayanishga imkon beradi.

Misol

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];
}

Bu standart qiymat bilan birlashtirilishi mumkin.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!