Utility Types — ReturnType, Parameters, InstanceType, Awaited

~15 daq · TypeScript · Ilg'or Turlar

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