Generics

TypeScript-dagi Generics

TypeScript Asosiy Generiklar

Generiklar 'type o'zgaruvchilar' yaratishga imkon beradi, bu esa sinflar, funksiyalar va tur aliaslarini yaratishda turlarni aniq belgilamasdan foydalanishga imkon beradi.

Generiklar qayta ishlatiladigan kod yozishni osonlashtiradi.

Funksiyalar

Generiklar yordamida funksiyalarni umumlashtirilgan metodlar yaratish mumkin, bu esa ishlatiladigan va qaytariladigan turlarni aniqroq tasvirlashga 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]

TypeScript generik parametrning turini funktsiya parametrlaridan ham aniqlay oladi.

Sinflar

Generiklar umumlashtirilgan sinflarni yaratishda ham ishlatilishi mumkin, masalan Map.

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

TypeScript konstruktordagi parametrdan generik parametr turini aniqlay oladi.

Tur Aliaslari

Generiklar yordamida yaratilgan tur aliaslari ko'proq qayta foydalaniladigan turlarni yaratishga imkon beradi.

Misol:

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

Bu interfeyslar bilan ham ishlaydi, quyidagi sintaksisda: interface Wrapped<T> { ... }.

Default Qiymat

Generiklar default qiymatlarni olishlari mumkin, bu qiymatlar boshqa qiymat ko'rsatilmagan yoki aniqlanmagan bo'lsa qo'llaniladi.

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

Extends

Generiklarga cheklovlar qo'shilishi mumkin, bu cheklovlar generik turda ishlatiladigan yanada aniqroq turga ishonish imkonini 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 default qiymat bilan birgalikda ishlatilishi mumkin.

Ushbu sahifada

GitHubda tahrirlash