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.
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!
