typescript•types

آشنایی با Awaited Type در TypeScript

آشنایی با utility type به نام Awaited در TypeScript و نحوه باز کردن Promise ها.

TypeScriptUtility TypesPromiseAsyncAwaited
By Hamid Mohamadi2026-09-02

آشنایی با Awaited Type در TypeScript

برنامه‌های مدرن JavaScript به شکل گسترده از برنامه‌نویسی غیرهمزمان استفاده می‌کنند.

زمانی که با async function، Promise، درخواست‌های API و دریافت داده کار می‌کنیم، معمولا نیاز داریم نوع واقعی مقدار نهایی را بدانیم.

TypeScript یک utility type داخلی به نام زیر دارد:

Awaited<T>;

که برای استخراج نوع نهایی Promise استفاده می‌شود.

مشکل چیست؟

فرض کنید:

async function getUser() {
  return {
    id: 1,
    name: 'Hamid',
  };
}

نوع استنتاج‌شده:

Promise<{
  id: number;
  name: string;
}>;

اگر فقط نوع object نهایی را بخواهیم:

{
  id: number;
  name: string;
}

می‌توانیم استفاده کنیم:

type User = Awaited<ReturnType<typeof getUser>>;

نحوه کار Awaited

type A = Awaited<Promise<string>>;

نتیجه:

string;

Promise های تو در تو

Awaited به صورت بازگشتی Promise ها را باز می‌کند:

type Result = Awaited<Promise<Promise<string>>>;

نتیجه:

string;

استفاده از Awaited در API ها

async function fetchProducts() {
  const response = await fetch('/api/products');
 
  return response.json();
}
 
type Products = Awaited<ReturnType<typeof fetchProducts>>;

این کار باعث می‌شود type همیشه با پیاده‌سازی تابع هماهنگ باشد.

Awaited در React Server Components

این موضوع در Next.js App Router بسیار کاربردی است:

async function getArticles() {
  return fetch('/api/articles').then((res) => res.json());
}
 
type Articles = Awaited<ReturnType<typeof getArticles>>;

Awaited در مقابل ReturnType

ReturnType نوع Promise را برمی‌گرداند:

type Result = ReturnType<typeof getUser>;

نتیجه:

Promise<User>;

Awaited مقدار نهایی را استخراج می‌کند:

type Result = Awaited<ReturnType<typeof getUser>>;

نتیجه:

User;

نتیجه‌گیری

Awaited<T> یک utility type کوچک اما قدرتمند در TypeScript است.

این نوع زمانی بسیار مفید است که با async function، API، Next.js Server Components و دریافت داده در React کار می‌کنیم.

به جای نگهداری دستی type های تکراری، TypeScript می‌تواند ساختار نهایی داده را به صورت خودکار استخراج کند.