Utility Types — ReturnType, Parameters, InstanceType, Awaited
Funksiyaning qaytish turini alohida e'lon qilmasdan olish — yoki async funksiya qaytaradigan Promise<T> ichidagi T ni olish. Bu hollarda ReturnType, Parameters, Awaited utility turlari qulay.
ReturnType<T> — funksiya qaytish turi
function foydalanuvchiOl() {
return { id: 1, ism: "Jasur", email: "j@mail.com" };
}
type FoydalanuvchiTuri = ReturnType<typeof foydalanuvchiOl>;
// { id: number; ism: string; email: string }
Funksiya o'zgarganda FoydalanuvchiTuri avtomatik yangilanadi — ikki joyda tur saqlash kerak emas.
Parameters<T> — parametrlar turi
Funksiya parametrlarini tuple sifatida qaytaradi:
function yuborish(url: string, holat: number, matn: string): void {}
type YuborishParam = Parameters<typeof yuborish>;
// [url: string, holat: number, matn: string]
type BirinchiParam = Parameters<typeof yuborish>[0]; // string
InstanceType<T> — class instans turi
Constructor funksiyasidan instans turini olish:
class Foydalanuvchi {
constructor(public ism: string) {}
}
type FoydalanuvchiInstans = InstanceType<typeof Foydalanuvchi>;
// Foydalanuvchi
function yaratish(Klass: typeof Foydalanuvchi, ism: string): InstanceType<typeof Foydalanuvchi> {
return new Klass(ism);
}
Awaited<T> — Promise ichidagi tur
Promise<T> dan T ni olish (rekursiv):
async function foydalanuvchilarOl(): Promise<Foydalanuvchi[]> {
return fetch("/api").then(r => r.json());
}
type Natija = Awaited<ReturnType<typeof foydalanuvchilarOl>>;
// Foydalanuvchi[] — Promise olib tashlandi
ConstructorParameters<T>
Class constructor parametrlarini tuple sifatida:
class Ulanish {
constructor(host: string, port: number, ssl: boolean) {}
}
type UlanishParam = ConstructorParameters<typeof Ulanish>;
// [string, number, boolean]
Amaliy — funksiyani wrap qilish
function hisoblash(a: number, b: number): number {
return a + b;
}
function loglanuvchi<T extends (...args: any[]) => any>(fn: T) {
return (...args: Parameters<T>): ReturnType<T> => {
console.log("Argument:", args);
const natija = fn(...args);
console.log("Natija:", natija);
return natija;
};
}
const logliHisoblash = loglanuvchi(hisoblash);
logliHisoblash(2, 3); // Argument: [2, 3] → Natija: 5
Xulosa
ReturnType<typeof fn> — funksiya qaytish turi
Parameters<typeof fn> — parametrlar [A, B, C]
Parameters<typeof fn>[0] — birinchi parametr turi
InstanceType<typeof MyClass> — class instans turi
ConstructorParameters<typeof MyClass> — constructor parametrlari
Awaited<Promise<T>> — T (Promise olib tashlangan)
Awaited<ReturnType<typeof asyncFn>> — async qaytish turi
Keyingi dars
53-dars: Dekorator nima? — experimentalDecorators, metadata reflection