تایپ‌اسکریپت۱۲ درس رایگان

آموزش تایپ اسکریپت از صفر با کامپایلر واقعی

در این دوره تایپ اسکریپت را از اولین نوع تا جنریک‌ها و تایپ‌های شرطی یاد می‌گیرید. هر کدی که می‌نویسید با tsc در حالت strict کامپایل می‌شود و خطای نوع را همان لحظه می‌بینید.

  • تمرین‌های زمان اجرا و سطح نوع
  • بدون نصب Node یا ویرایشگر
  • درس‌های اول رایگان است
ببینید چه می‌سازید
درس
۲۲۰
تمرین
۱۸۶
فصل
۲۴
پایان دوره
گواهی
نمونه: سفارشی که حالت نامعتبر ندارد
main.tsسفارشی که حالت نامعتبر ندارد
// هر سفارش فقط در یکی از این حالت‌هاست و هر حالت فیلدهای خودش را دارد
type Order =
  | { status: 'pending'; id: number }
  | { status: 'shipped'; id: number; tracking: string }
  | { status: 'delivered'; id: number; days: number }
  | { status: 'cancelled'; id: number; reason: string };
 
function describe(order: Order): string {
  switch (order.status) {
    case 'pending':
      return `#${order.id}  waiting for payment`;
    case 'shipped':
      return `#${order.id}  on the way, tracking ${order.tracking}`;
    case 'delivered':
      return `#${order.id}  delivered in ${order.days} days`;
    case 'cancelled':
      return `#${order.id}  cancelled: ${order.reason}`;
    default: {
      // اگر حالت تازه‌ای اضافه شود و اینجا جا بماند، tsc این خط را رد می‌کند
      const missed: never = order;
      return missed;
    }
  }
}
 
const orders: Order[] = [
  { status: 'pending', id: 101 },
  { status: 'shipped', id: 102, tracking: 'IR-58213' },
  { status: 'delivered', id: 103, days: 3 },
  { status: 'cancelled', id: 104, reason: 'out of stock' },
];
orders.forEach((o) => console.log(describe(o)));
 
// @ts-expect-error: «shiped» یکی از حالت‌ها نیست و tsc آن را نمی‌پذیرد
const typo: Order = { status: 'shiped', id: 105 };
خروجی
#101  waiting for payment
#102  on the way, tracking IR-58213
#103  delivered in 3 days
#104  cancelled: out of stock

هر سفارش فقط در یکی از چهار حالت است و هر حالت فیلدهای خودش را دارد. اگر حالتی در switch جا بماند یا نام حالتی اشتباه نوشته شود، tsc برنامه را کامپایل نمی‌کند. نمونه‌های دیگر

آنچه یاد می‌گیرید

در این دوره چه چیزهایی یاد می‌گیرید

دوره از نوع‌های روزمره شروع می‌شود و تا برنامه‌نویسی در سطح نوع پیش می‌رود.

  1. فصل ۱ و ۲ و ۲۱

    نوع‌ها و کامپایلر

    نوع متغیر، تابع، آرایه و تاپل را می‌نویسید، فرق any و unknown را یاد می‌گیرید و می‌دانید حالت strict چه بررسی‌هایی را روشن می‌کند.

  2. فصل ۳ و ۴ و ۵

    شکل داده‌ها

    با interface و type شیء نوع‌دار می‌سازید و با یونیون، literal، as const و satisfies دامنهٔ مقدارها را محدود می‌کنید. جای enum را هم می‌شناسید.

  3. فصل ۶

    توابع نوع‌دار

    پارامتر اختیاری و پیش‌فرض، پارامتر rest، overload و نوع this را می‌نویسید و می‌فهمید callback نوعش را از کجا می‌گیرد.

  4. فصل ۷ و ۸

    باریک‌سازی و یونیون‌های تفکیک‌شده

    با typeof، in، instanceof و گاردهای is و asserts نوع را باریک می‌کنید و با never مطمئن می‌شوید هیچ حالتی جا نمانده است.

  5. فصل ۹ و ۱۰

    جنریک‌ها

    تابع، اینترفیس و کلاسی می‌نویسید که با هر نوعی کار کند و قید، پیش‌فرض و استنتاج را در آن‌ها به کار می‌برید.

  6. فصل ۱۱ و ۱۲

    keyof و تایپ‌های کاربردی

    با keyof، typeof و دسترسی اندیسی نوع را از داده می‌سازید و Partial، Pick، Omit، Record و ReturnType را هم به کار می‌برید و هم از صفر می‌نویسید.

  7. فصل ۱۳ و ۱۴ و ۱۵

    برنامه‌نویسی در سطح نوع

    تایپ‌های نگاشتی، تایپ‌های شرطی با infer و تایپ‌های قالب‌رشته‌ای می‌نویسید، مثلاً نوعی که پارامترهای یک مسیر را از متن آن بیرون می‌کشد.

  8. فصل ۱۶ و ۱۷ و ۲۲

    null، خطاها و دام‌های رایج

    null و undefined را پیش از استفاده حذف می‌کنید، خطا را با نوع Result برمی‌گردانید و از دام‌هایی مثل as ناامن و any پنهان دوری می‌کنید.

  9. فصل ۱۸ و ۱۹ و ۲۰

    کلاس‌ها، async و ماژول‌ها

    کلاس با private، readonly، abstract و implements می‌نویسید، Promise و async/await را با نوع دقیق به کار می‌برید و با import type و namespace کار می‌کنید.

  10. فصل ۲۳ و ۲۴

    دو پروژهٔ پایانی

    یک ردیاب وظایف نوع‌دار را قدم‌به‌قدم می‌سازید و در «باشگاه نوع» چالش‌هایی مثل DeepReadonly و تجزیهٔ مسیر را در سطح نوع حل می‌کنید.

نمونه‌کدها

نمونه‌هایی از کدهایی که می‌نویسید

این پنج نمونه را برای همین صفحه نوشته‌ایم. هر کدام با همان کامپایلر و همان Node درس‌ها اجرا شده و خروجی کنارش همان چیزی است که چاپ می‌کند. خطی که زیر @ts-expect-error آمده عمداً غلط است و tsc آن را رد می‌کند.

جاوااسکریپت یا تایپ اسکریپت

تایپ اسکریپت چه چیزی به جاوااسکریپت اضافه می‌کند

تایپ اسکریپت چه چیزی به جاوااسکریپت اضافه می‌کند
موضوعجاوااسکریپتتایپ اسکریپت
خطای نوعهنگام اجرا پیدا می‌شود، اگر آن خط اجرا شود.پیش از اجرا، هنگام کامپایل پیدا می‌شود.
اشتباه در نام یک فیلدمقدار undefined می‌شود و برنامه ادامه می‌دهد.کامپایلر همان خط را نشان می‌دهد.
تغییر شکل یک دادهجاهایی را که باید عوض شوند خودتان پیدا می‌کنید.کامپایلر همهٔ آن جاها را فهرست می‌کند.
تکمیل خودکار در ویرایشگرویرایشگر فقط حدس می‌زند.از روی نوع‌ها دقیق است.
هزینهٔ یادگیریکمترنوشتن و خواندن نوع‌ها را هم یاد می‌گیرید.

نوع‌ها فقط هنگام کامپایل وجود دارند و در جاوااسکریپت ساخته‌شده پاک می‌شوند. برای همین برنامه کندتر نمی‌شود.

روش کار

یک درس چطور پیش می‌رود

  1. ۱

    توضیح کوتاه را می‌خوانید

    هر درس یک مفهوم را با مثال توضیح می‌دهد و یک کار مشخص از شما می‌خواهد.

  2. ۲

    کد را در مرورگر می‌نویسید

    با دکمهٔ اجرا، کد شما کامپایل و روی Node اجرا می‌شود. اگر نوعی اشتباه باشد، پیام کامپایلر را همان‌جا می‌بینید.

  3. ۳

    کارتان بررسی می‌شود

    دکمهٔ بررسی، کد را با تست‌های تمرین می‌سنجد. اگر گیر کردید، راهنمای همان تمرین قدم‌به‌قدم کمکتان می‌کند.

سرفصل‌ها

سرفصل‌های دوره

۲۴ سرفصل، ۲۲۰ درس، ۱۸۶ تمرین

۱

چرا نوع‌ها؟ تایپ‌اسکریپت، کامپایلر و طرزِ فکرِ آن

۷ درس
۲

حاشیه‌نویسیِ نوع و نوع‌های روزمره

۹ درس
  • «: نوع» چیست؟ حاشیه‌نویسی، استنتاج و نوع‌های پایهپیش‌نمایش رایگان
  • حاشیه‌نویسیِ متغیرها و نوع‌های اولیهپیش‌نمایش رایگانتمرین
  • پارامترها و نوعِ خروجی و voidپیش‌نمایش رایگانتمرین
  • آرایه‌ها: T[] در برابرِ Array<T>پیش‌نمایش رایگانتمرین
  • تاپل‌های پایه: [string, number]پیش‌نمایش رایگانتمرین
  • null و undefined زیرِ strictNullChecksتمرین
  • چرا any سوراخ است و unknown مرزِ امنتمرین
  • گشاد شدنِ نوع: const در برابرِ let (سطحِ‌نوع)تمرین
  • گردشِ کدِ آماده: as، علامتِ ! و دام‌های خروجیِ کنسولتمرین
۳

اشیاء، اینترفیس‌ها در برابرِ type-aliasها

۹ درس
  • سه راه برای نام‌گذاریِ شِیپِ یک شیء
  • اولین interface: ساختنِ یک شیءِ نوع‌دارتمرین
  • فیلدهای اختیاری ? و اشیاء تودرتوتمرین
  • readonly: فیلدهایی که نمی‌شود تغییرشان دادتمرین
  • بررسیِ ویژگیِ اضافی: literalِ تازه در برابرِ متغیرتمرین
  • امضای اندیسی [k: string]: Tتمرین
  • interface extends و ادغامِ اعلان (declaration merging)تمرین
  • extends در برابرِ & و تصادمِ اعضا با neverتمرین
  • نمایش: ماتریسِ تصمیمِ interface در برابرِ typeتمرین
۴

یونیون‌ها، اینترسکشن‌ها، literalها و as const / satisfies

۹ درس
  • ترکیبِ نوع‌ها: یونیون «یا» و اینترسکشن «و»
  • نوعِ یونیون به‌عنوانِ پارامترتمرین
  • نوع‌های literal و دامِ «پهن‌شدن»تمرین
  • یونیونِ literal: ساختنِ یک دامنه‌ی محدودتمرین
  • نوعِ اینترسکشن: کنارِ هم گذاشتنِ شکل‌هاتمرین
  • as const: قفل‌کردن به readonly و literalِ دقیقتمرین
  • از as const تا یونیون: typeof arr[number]تمرین
  • satisfies: اعتبارسنجی بدونِ پهن‌شدنتمرین
  • نمایش: یک پیکربندیِ نوع‌دار با literal، as const و satisfiesتمرین
۵

enum در برابرِ یونیونِ literal

۶ درس
  • enum چیست و چرا وجود دارد؟
  • enumِ عددی و نگاشتِ معکوستمرین
  • enumِ رشته‌ای: یک‌طرفه و نامی‌گونهتمرین
  • const enum: هست، ولی اینجا نه
  • ایده‌ی مدرن: یونیونِ literal از as constتمرین
  • تورِ کد: enum در برابرِ یونیونِ literalتمرین
۶

★ توابع به‌صورتِ عمیق: overload، this و پارامترهای rest

۹ درس
  • نقشه‌ی توابعِ نوع‌دار: از پارامتر تا امضای تابع
  • پارامترِ اختیاری و پیش‌فرض: ?? نه ||تمرین
  • پارامترهای rest و تاپل‌های variadic: [string, ...number[]]تمرین
  • تاپل‌های readonly و برچسب‌دار: [name:string, age:number]تمرین
  • نوعِ تابع و امضای فراخوانی؛ construct signature به‌صورتِ سبکتمرین
  • تایپِ this: پارامترِ جعلیِ پاک‌شونده و دامِ از-دست-رفتنِ thisتمرین
  • Overload: امضاهای دیده‌شده، پیاده‌سازیِ پنهان و ترتیبِ خاص-به-عامتمرین
  • تایپِ contextual و callbackها: چرا callbackِ مستقل باید نوع بگیردتمرین
  • نمایش: bivariance، contravariance و یک کیتِ توابعِ نوع‌دارِ آمادهتمرین
۷

★ باریک‌سازی، تحلیلِ جریانِ کنترل و گاردهای نوع

۱۱ درس
  • باریک‌سازی و تحلیلِ جریانِ کنترل: بزرگ‌ترین چیزی که جاوااسکریپت ندارد
  • گاردهای typeof و دامِ typeof null === 'object'تمرین
  • باریک‌سازیِ صدق/کذب و عملگرهای ‎??‎ و ‎||‎ و ‎&&تمرین
  • باریک‌سازی با تساوی، switch و دامِ ‎!= nullتمرین
  • باریک‌سازی با عملگرِ inتمرین
  • باریک‌سازی با instanceof برای کلاس‌هاتمرین
  • تحلیلِ جریانِ کنترل: باریک‌سازی با انتساب، ریست و دامِ کال‌بکتمرین
  • گاردهای نوعِ کاربرساخته: x is Fishتمرین
  • توابعِ asserts: ادعا کن، سپس بدونِ ترس استفاده کنتمرین
  • پیش‌بینِ نوع در ‎.filter و یک نگاه به never در شاخه‌ی غیرقابلِ‌رسیدنتمرین
  • گردشِ کد: یک پارسرِ ورودیِ امن با همه‌ی گاردهاتمرین
۸

★ یونیون‌های تفکیک‌شده و جامعیت با never

۹ درس
  • تگِ تشخیص: چرا یونیونِ تفکیک‌شده الگوی شاخصِ تایپ‌اسکریپت است
  • ماشین‌حسابِ مساحت: یونیونِ سه‌حالته و switch روی تگتمرین
  • جامعیت با never: فراموش‌کردنِ یک حالت یعنی خطای کامپایلتمرین
  • باریک‌سازیِ درون‌شاخه: فیلدهای مخصوصِ هر حالتتمرین
  • reducer به سبکِ ردکس: حالت را با یونیونِ Action بِرانتمرین
  • ماشینِ حالت: گذارهای مجاز و افزودنِ حالتِ جدید که بیلد را می‌شکندتمرین
  • Result به‌عنوانِ یونیونِ تفکیک‌شده: باریک‌سازی روی okتمرین
  • افزودنِ حالت بیلد را می‌شکند — اثباتِ سطحِ‌نوعتمرین
  • گردشِ کدِ آماده: یک ماشینِ سفارش با DU، reducer، Result و جامعیتتمرین
۹

★ جنریک‌ها (۱): توابع، قید، استنتاج و پیش‌فرض

۱۱ درس
  • چرا جنریک؟ از any تا یک پارامترِ نوع
  • تابعِ identity جنریک و استنتاجِ خودکارتمرین
  • identity در زمانِ اجرا: همان مقدار، نوعِ سالمتمرین
  • چند پارامترِ نوع: رابطه‌ی ورودی‌ها و خروجی با pairتمرین
  • قانونِ طلایی: پارامترِ نوع باید دست‌کم دو بار ظاهر شودتمرین
  • قید با extends: محدودکردنِ T به شکلِ مورد نیازتمرین
  • قیدِ keyof: گرفتنِ یک ویژگی به‌صورتِ نوع‌دار با propتمرین
  • پارامترِ نوعِ پیش‌فرض با =تمرین
  • نگه‌داشتنِ دقتِ literal: const type parameter <const T>تمرین
  • مهارِ استنتاج با NoInferتمرین
  • نمایش: یک جعبه‌ابزارِ جنریکِ کاملتمرین
۱۰

★ جنریک‌ها (۲): اینترفیس‌ها، کلاس‌ها و ساختارهای داده‌ی نوع‌دار

۹ درس
  • از تابعِ جنریک تا ظرفِ جنریک: چرا اینترفیس و کلاس هم پارامتر نوع می‌گیرند
  • اینترفیسِ جنریک Box<T> و پیش‌فرضِ پارامترِ نوعتمرین
  • کلاسِ جنریک Box<T> و متدِ جنریک map<U>تمرین
  • Pair<A,B>: دو پارامترِ نوعِ مستقلتمرین
  • Stack<T> نوع‌دار و دامِ strictNullChecks در popتمرین
  • قید روی پارامترِ نوع و قیدی که به پارامترِ قبلی اشاره می‌کندتمرین
  • Repo<T extends {id:number}> با به‌روزرسانیِ Partial<T>تمرین
  • KVCache<K,V>: حافظه‌ی نهانِ نوع‌دار با دو پارامترِ کلید و مقدارتمرین
  • تورِ کدِ آماده: کتابخانه‌ی کوچکِ ساختارهای داده‌ی نوع‌دارتمرین
۱۱

★ keyof، typeof و دسترسیِ اندیسی

۱۱ درس
  • بازتاب روی نوع‌ها: keyof، typeof و دسترسیِ اندیسی چه‌اند؟
  • keyof: کلیدهای یک شِیپ را به یونیون تبدیل کنتمرین
  • typeof در جایگاهِ نوع: نوعِ یک مقدار را بگیرتمرین
  • keyof typeof: کلیدهای یک آبجکتِ ثابت را مشتق کن (RouteName)تمرین
  • keyof typeof enum: نام‌های اعضای یک enum را بگیرتمرین
  • دسترسیِ اندیسی روی اشیاء: T['a'] و T[K]تمرین
  • دسترسیِ اندیسی روی آرایه و تاپل: T[number] و T[0]تمرین
  • دسترسیِ اندیسیِ زنجیره‌ای: تو در توها را بپیماتمرین
  • همراهِ زمانِ‌اجرا: getProp جنریکِ امن با keyof و T[K]تمرین
  • Index signature در برابرِ Record و درباره‌ی noUncheckedIndexedAccess
  • نمایش: مشتقِ کاملِ یک نوع از یک پیکربندیِ ثابتتمرین
۱۲

★ تایپ‌های کاربردی: استفاده و بازنویسی از صفر

۱۱ درس
  • کتابخانه‌ی استانداردِ نوع‌ها: نقشه‌ی راه و دو پاسِ این ماژول
  • ترانسفورمرهای شیء در عمل: Partial و Required و Readonlyتمرین
  • Pick و Omit و Record: برش، حذف و ساختِ نگاشتتمرین
  • عملگرهای مجموعه روی یونیون: Exclude، Extract و NonNullableتمرین
  • استخراج از امضای توابع و کلاس‌ها: ReturnType، Parameters، ConstructorParameters، InstanceTypeتمرین
  • Awaited و رشته‌سازهای نوع: باز کردنِ Promise و دستکاریِ رشته در سطحِ نوعتمرین
  • بازنویسی از صفر (۱): MyPartial، MyRequired و MyReadonly با تایپِ نگاشتیتمرین
  • بازنویسی از صفر (۲): MyExclude، MyExtract و MyNonNullable با شرطیِ توزیع‌شوندهتمرین
  • بازنویسی از صفر (۳): MyPick، MyOmit و MyRecord (ترکیبِ نگاشتی + مجموعه‌ای)تمرین
  • بازنویسی از صفر (۴): MyReturnType، MyParameters و MyAwaited با inferتمرین
  • نمایشِ کدِ آماده: ساختِ شیءِ نوع‌دار با تایپ‌های کاربردیتمرین
۱۳

★ تایپ‌های نگاشتی (mapped types)

۹ درس
  • نگاشت روی کلیدها: ایده‌ی پشتِ mapped types
  • اولین نگاشت: کلونِ یک نوع و Stringifyتمرین
  • افزودنِ modifier: بازسازیِ Partial و Readonly از صفرتمرین
  • حذفِ modifier با - : ساختِ Concrete با -readonly و -?تمرین
  • تبدیلِ مقدار: Nullable و بسته‌بندیِ مقادیر در تابعتمرین
  • نگاشت روی یونیونِ کلیدها: بازسازیِ Record و Pickتمرین
  • بازنگاشتِ کلید با as: ساختِ Getters با قالب‌رشته‌ایتمرین
  • فیلترکردنِ کلیدها با as ... never: ساختِ OmitByTypeتمرین
  • گردشِ کدِ آماده: یک ابزارِ نگاشتیِ کاملتمرین
۱۴

★ تایپ‌های شرطی و infer

۱۱ درس
  • شاخه‌زدن در سطحِ نوع: T extends U ? X : Y
  • اولین شرطی: IsString و یک switch سطح‌نوعیتمرین
  • infer: بیرون‌کشیدنِ نوعِ عضوِ آرایهتمرین
  • infer روی تاپل: Head و Tailتمرین
  • infer روی توابع: ReturnType و Parameters از صفرتمرین
  • infer با قید و infer در چند جایگاهتمرین
  • شرطی‌های توزیعی: وقتی روی هر عضوِ یونیون پخش می‌شوند
  • توزیعی در برابرِ غیرتوزیعی و لبه‌ی neverتمرین
  • بازسازیِ Exclude و Extract و Awaitedتمرین
  • شرطیِ بازگشتی: DeepReadonly و Flattenتمرین
  • تورِ کدِ آماده: یک کیتِ کوچکِ سطح‌نوعی با شرطی و inferتمرین
۱۵

★ تایپ‌های قالب‌رشته‌ای (template-literal types)

۹ درس
  • قالبِ رشته در سطحِ نوع: درج، ضربِ یونیون و دستکاری‌های درون‌ساز
  • ساختِ نام: Greeting و درجِ نوعِ جنریکتمرین
  • ضربِ یونیون‌ها و دستکاری‌های درون‌ساز: ساختِ نامِ رویدادتمرین
  • الگوهای placeholder: ${number}/${string} و StartsWith با تطبیقِ قالبتمرین
  • استنتاج با infer داخلِ قالب: Split بازگشتیتمرین
  • Replace و ReplaceAll: جای‌گذاری در سطحِ نوعتمرین
  • ★ تجزیه‌ی مسیرِ روت: RouteParamsتمرین
  • ترکیب با تایپِ نگاشتی: snake_case و Getters از کلیدهاتمرین
  • نمایش: درازای رشته و ParseInt در سطحِ نوع (چرا داوری نمی‌کنیم)تمرین
۱۶

★ unknown، any، never و ایمنیِ سخت‌گیرانه در برابرِ null

۱۱ درس
  • سه نوعِ ویژه و شبکه‌ی انتساب: never، unknown و any
  • any سوراخ است، unknown دیوار: تفاوتِ گرفته‌شده با tscتمرین
  • unknown را پیش از استفاده باریک کنتمرین
  • مرزِ داده‌ی بیرونی: JSON.parse، any و مهارِ آن با unknownتمرین
  • catch (e) از نوعِ unknown است: با instanceof Error مهارش کنتمرین
  • strictNullChecks: null را پیش از استفاده حذف کنتمرین
  • تله‌ی کلاسیک: ?? در برابرِ || (دامِ ۰ و رشته‌ی خالی)تمرین
  • ?. کوتاه‌بست می‌کند و Array#find ممکن است undefined بدهدتمرین
  • never نوعِ تهِ خالی: جامعیت، Exclude و اشتراکِ ناممکنتمرین
  • جامعیت با never: شاخه‌ی فراموش‌شده را کامپایلر می‌گیردتمرین
  • دروغ به کامپایلر: ! غیرنال و ! انتسابِ قطعی (پلی به ماژولِ بعد)
۱۷

خطاهای نوع‌دار و نوعِ Result

۸ درس
  • مدلِ خطا در تایپ‌اسکریپت: throw نوع ندارد، catch هم unknown است
  • مرزِ امنِ catch: باریک‌سازیِ e از نوعِ unknownتمرین
  • کلاس‌های خطای سفارشی و گاردِ isAppErrorتمرین
  • نوعِ Result: یونیونِ تفکیک‌شده به‌جای پرتابتمرین
  • کمک‌کننده‌های Result: unwrapOr، map و chainتمرین
  • اثباتِ سطحِ‌نوعِ ok و err و جامعیتِ مدیریتِ Result با neverتمرین
  • اعتبارسنجیِ نوع‌دار: بازگرداندنِ Result با نقشه‌ی خطای فیلد‌به‌فیلدتمرین
  • کدِ آماده: خطِ لوله‌ی امنِ تجزیه با Result از مرزِ unknown تا خروجیتمرین
۱۸

★ کلاس‌ها و شیءگراییِ تایپ‌اسکریپت

۱۱ درس
  • کلاس در تایپ‌اسکریپت: نوع‌ها روی شیءگرایی
  • فیلدهای نوع‌دار، initializer و getterِ نوع‌دارتمرین
  • حسابِ بانکی: private و readonly با گاردِ نوعتمرین
  • parameter property: سازنده‌ی کوتاه‌شدهتمرین
  • implements: قراردادِ اینترفیس روی کلاستمرین
  • extends، super و protectedتمرین
  • کلاس‌های abstract و عضوِ abstractتمرین
  • کلاسِ جنریک: Box<T> و متدِ mapتمرین
  • this چندریختی و اعضای static: سازنده‌ی زنجیره‌ایتمرین
  • آغازسازیِ سخت‌گیرانه‌ی فیلد، ! قطعی، override و خداحافظی با decorator
  • تورِ کدِ آماده: کیف‌پولِ نوع‌دار از نگاهِ بالاتمرین
۱۹

async نوع‌دار: Promiseها، async/await و Awaited

۹ درس
  • Promise<T> یعنی چه؟ مدلِ ذهنیِ async نوع‌دار
  • نوعِ بازگشتیِ تابعِ async و باز کردن با awaitتمرین
  • Awaited<T>: باز کردنِ Promiseهای تو‌در‌تو در سطحِ نوعتمرین
  • Promise.all نوع‌دار: استنتاجِ tuple و ترتیبِ قطعیتمرین
  • allSettled و race: نوعِ نتیجه‌هاتمرین
  • خطای async نوع‌دار: try/catch با e: unknownتمرین
  • safeAsync نوع‌دار: پیچیدنِ async در یک Resultتمرین
  • دونده‌ی ترتیبیِ async: await درونِ حلقه با ترتیبِ قطعیتمرین
  • تورِ کدِ آماده: خطِ لوله‌ی دادهٔ async نوع‌دارتمرین
۲۰

ماژول‌ها، import type و namespace (مفهومی + اجرا با namespace)

۶ درس
  • ماژول چیست؟ از import/export تا re-export
  • import type و export type: جدا کردنِ نوع‌ها از مقدارها
  • تشخیصِ ماژول و تعاملِ CommonJS با ESM
  • namespace: ساختار دادن در یک فایل (تور آماده)تمرین
  • namespace بساز و اعضایش را صدا بزنتمرین
  • تفکیکِ model و service در یک فایل با namespaceتمرین
۲۱

سخت‌گیری و tsconfig (مفهومی)

۶ درس
  • tsconfig چیست و چرا اینجا نمی‌فرستیمش؟
  • پرچمِ strict دقیقاً چه چیزهایی را روشن می‌کند؟
  • تورِ کدِ آماده: noImplicitAny واقعاً شلیک می‌کندتمرین
  • تورِ کدِ آماده: strictNullChecks جلوی null را می‌گیردتمرین
  • پرچم‌های اختیاری اما مهم (و target/lib/module)
  • تورِ کدِ آماده: قراردادِ سخت‌گیریِ این دوره از نگاهِ بالاتمرین
۲۲

اصطلاحات و دام‌ها: any-خزی، as ناامن، تایپِ ساختاری

۹ درس
  • طرزِ فکرِ اصطلاحی: به کامپایلر دروغ نگو
  • any-خزی در برابرِ unknownِ امن در مرزتمرین
  • asِ دروغگو و !‌ِ غیرتهی: چرا خطرناک‌اندتمرین
  • استنتاج، as const و یونیونِ literal به‌جای حاشیه‌نویسی و enumتمرین
  • غافلگیریِ تایپِ ساختاری: ویژگیِ اضافه فقط روی literalِ تازهتمرین
  • باریک‌سازیِ گم‌شده، Object.keys و T|undefinedتمرین
  • readonlyِ کم‌عمق و آرایه‌های readonlyتمرین
  • تایپِ برندشده (nominal) و فضای‌نامِ نوع در برابرِ مقدارتمرین
  • تورِ کد: دامِ ناامن در برابرِ اصطلاحِ امنتمرین
۲۳

★ پروژه‌ی پایانیِ زمانِ‌اجرا: ردیابِ وظایفِ نوع‌دار

۸ درس
  • نقشه‌ی پروژه: ردیابِ وظایف چه شکلی است و چطور می‌سنجیمش
  • گام ۱ — مدلِ داده: Taskِ تفکیک‌شده و نوعِ Resultتمرین
  • گام ۲ — مخزنِ جنریک: Repo<T extends {id:number}>تمرین
  • گام ۳ — تجزیه‌گرِ فرمان با باریک‌سازیتمرین
  • گام ۴ — کاهنده‌ی (reducer) تفکیک‌شده با جامعیتِ neverتمرین
  • گام ۵ — ذخیره‌سازِ asyncِ نوع‌دار و قطعیتمرین
  • گام ۶ — اتصالِ همه: حلقه‌ی فرمان و حالتِ نهاییتمرین
  • تورِ کدِ آماده: ردیابِ وظایفِ کامل از آغاز تا پایانتمرین
۲۴

★ پروژه‌ی پایانیِ سطحِ‌نوع: باشگاهِ نوع

۱۲ درس
  • قوانینِ باشگاه: Equal، Expect و چرا استارتر باید بشکند
  • پله ۱ — توابعِ تاپل: First، Last و Lengthتمرین
  • پله ۲ — دستکاریِ تاپل: Concat، Push، Pop و Reverseتمرین
  • پله ۳ — یونیون و تاپل: TupleToUnion و Includesتمرین
  • پله ۴ — تایپ‌های متا: If، And، Or، Not و ساختِ خودِ Equalتمرین
  • پله ۵ — تبدیل‌های عمیق: DeepReadonly و DeepPartialتمرین
  • پله ۶ — ترکیبِ شکل‌ها: Merge و PartialByKeysتمرین
  • پله ۷ — باشگاهِ رشته: Trim، Replace و Splitتمرین
  • پله ۸ — تجزیه‌ی URL: ParseQueryString و RouteParamsتمرین
  • پله ۹ — مسیرِ نوع‌دار: PathValue در سطحِ نوع + get در زمانِ اجراتمرین
  • پله ۱۰ — ماشین‌آلاتِ مرتبه‌بالا: UnionToIntersection و Chainableتمرین
  • غولِ آخر و تورِ پایانی: کتابخانه‌ی استاندارد، بازساخته از صفرتمرین
شروع دوره

از همین امروز شروع کنید

درس‌های اول رایگان است و برای شروع پرداختی لازم نیست. هر وقت خواستید ادامه دهید، همین دوره را بخرید یا با اشتراک پرو همهٔ دوره‌ها را باز کنید.

این دوره شامل:
  • ۲۲۰ درس تعاملی
  • ۱۸۶ تمرین عملی
  • ۴۴ ساعت محتوای آموزشی
  • اجرای کد در مرورگر، بدون نصب
  • گواهی پایان دوره
  • دسترسی مادام‌العمر

نمونه‌ها را دوباره ببینید

رایگانبرای شروع

۱۲ درس ابتدایی رایگان است. برای ادامه، اشتراک بگیرید یا دوره را بخرید.

بدون نیاز به پرداخت مبلغی برای شروع

برای چه کسی

این دوره برای چه کسی است

  • برنامه‌نویس جاوااسکریپت

    اگر جاوااسکریپت می‌نویسید و می‌خواهید در پروژه‌هایی کار کنید که با تایپ اسکریپت نوشته شده‌اند.

  • توسعه‌دهندهٔ فرانت‌اند یا بک‌اند

    اگر با React، Angular، Node یا NestJS کار می‌کنید، چون پروژه‌های این ابزارها اغلب با تایپ اسکریپت نوشته می‌شوند.

  • علاقه‌مند به نوع‌های پیشرفته

    اگر جنریک‌ها و تایپ‌های شرطی را در کد دیگران می‌بینید و می‌خواهید خودتان آن‌ها را بنویسید.

پیش‌نیاز: آشنایی با مبانی جاوااسکریپت، مثل متغیر، تابع، آرایه و شیء.

بعد از این دوره

پرسش‌ها

پرسش‌های پرتکرار

تایپ اسکریپت چیست؟
زبانی است که روی جاوااسکریپت ساخته شده و به آن نوع اضافه می‌کند. کامپایلر tsc نوع‌ها را بررسی می‌کند و کد را به جاوااسکریپت معمولی تبدیل می‌کند، پس هر جا جاوااسکریپت اجرا می‌شود، کد تایپ اسکریپت هم اجرا می‌شود.
برای یادگیری تایپ اسکریپت باید جاوااسکریپت بلد باشم؟
بهتر است مبانی جاوااسکریپت را بدانید. این دوره روی نوع‌ها تمرکز دارد و رفتار جاوااسکریپت را از پایه درس نمی‌دهد. اگر جاوااسکریپت را تازه شروع می‌کنید، اول دورهٔ «جاوااسکریپت از صفر تا برنامه‌نویس» را بگذرانید.
تمرین‌های این دوره چطور بررسی می‌شوند؟
دو نوع تمرین دارید. در تمرین‌های زمان اجرا، کد شما کامپایل و روی Node اجرا می‌شود و خروجی آن با جواب درست مقایسه می‌شود. در تمرین‌های سطح نوع، خود نوع‌ها با تست‌هایی مثل Expect<Equal<…>> سنجیده می‌شوند و نوع اشتباه یعنی کامپایل نشدن.
برای تمرین باید Node یا TypeScript نصب کنم؟
نه. ویرایشگر، کامپایلر و اجرای کد همه در مرورگر هستند. هر وقت خواستید روی رایانهٔ خودتان کار کنید، همین کدها با Node و tsc همان‌جا هم اجرا می‌شوند.
React یا Angular هم در این دوره آموزش داده می‌شود؟
نه. این دوره خود زبان تایپ اسکریپت را آموزش می‌دهد و DOM، ابزارهای ساخت و فریم‌ورک‌ها در آن نیستند. آنچه یاد می‌گیرید در هر پروژهٔ تایپ اسکریپت، با هر فریم‌ورکی، به کارتان می‌آید.
چند درس این دوره رایگان است؟
درس‌های ابتدایی دوره رایگان است و برای شروع پرداختی لازم نیست. تعداد دقیق آن‌ها کنار دکمهٔ شروع نوشته شده است. برای ادامه، دوره را می‌خرید یا اشتراک می‌گیرید.
در پایان دوره گواهی می‌گیرم؟
بله. وقتی همهٔ درس‌های دوره را تمام کنید، گواهی پایان دوره با یک شمارهٔ استعلام صادر می‌شود و هر کسی می‌تواند درستی آن را در سایت بررسی کند.

همین امروز شروع کنید

اولین برنامهٔ نوع‌دارتان را همین امروز در مرورگر بنویسید. شروع رایگان است و در کمتر از دو دقیقه وارد محیط یادگیری می‌شوید.

آموزش تایپ‌اسکریپت (TypeScript) از صفر تا برنامه‌نویس — دینا کد