آموزش تایپ اسکریپت: راهنمای کامل توسعه دهنده

Typescript: The Complete Developer's Guide

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: با یادگیری الگوهای طراحی محبوب و ساخت پروژه های پیچیده، تایپ اسکریپت را مسلط کنید. شامل React و Express می شود! الگوهای اصلی طراحی برای ساخت برنامه های بزرگ ادغام Typescript در پروژه های React/Redux یا Express درک ترکیب بندی در مقابل ارث و زمان استفاده از هر کد قابل استفاده مجدد بنویسید که توسط کلاس ها و رابط ها طراحی شده است.

ترکیب در مقابل وراثت؟ شما آن را درک خواهید کرد. چارچوب وب خود را بسازید؟ شما آن را انجام خواهید داد. تایپ اسکریپت با React/Redux؟ اینجاست!

--------------------

این بهترین دوره آنلاین برای تسلط بر Typescript است.

هر دوره آنلاین دیگر، نحو و ویژگی‌های اولیه Typescript را به شما آموزش می‌دهد، اما فقط این دوره به شما نشان می‌دهد که چگونه تایپ اسکریپت را در پروژه‌های واقعی اعمال کنید، و به شما آموزش می‌دهد که چگونه پروژه‌های بزرگ و موفق را از طریق مثال بسازید.

Typescript یک "ابر مجموعه" از جاوا اسکریپت است. این بدان معناست که اگر از قبل جاوا اسکریپت را می دانید، آماده گذراندن این دوره هستید. Typescript چندین ویژگی مهم را به جاوا اسکریپت اضافه می کند، از جمله یک سیستم تایپ. این نوع سیستم برای کمک به شما در یافتن خطاها در حین توسعه طراحی شده است، نه زمانی که کد خود را اجرا می کنید. این بدان معناست که با شناسایی اشکالات در مراحل اولیه توسعه، دو برابر بهره وری خواهید داشت. اما علاوه بر سیستم تایپ، تایپ اسکریپ چندین ابزار را برای ساختاردهی پایگاه‌های کد بزرگ و نوشتن کدهای واقعاً قابل استفاده مجدد ارائه می‌کند.

تسلط بر تایپ اسکریپت با خواندن مستندات به تنهایی چالش برانگیز است. اگرچه ممکن است بدانید "آرایه تایپ شده" یا "رابط" چیست، اسناد (و دوره های دیگر!) به شما نشان نمی دهند که کجا از این ویژگی ها استفاده کنید یا چگونه از آنها به طور موثر استفاده کنید. هدف این دوره این است که به شما کمک کند تا بفهمید چرا هر ویژگی Typescript وجود دارد و دقیقاً کجا از آنها استفاده کنید.

شرکت های برتر تشنه توسعه دهندگان Typescript هستند. برخی از بزرگترین برنامه های وب امروزی با Typescript ساخته می شوند. کارفرمایان در تلاش هستند تا مهندسانی را بیابند که به این سیستم پیشرفته مسلط باشند. دانش کامل تایپ اسکریپت با دادن مهارت منحصر به فردی که تعداد کمی از مهندسان دیگر از آن برخوردارند، شما را بسیار قابل استفاده تر می کند.

برای ساخت برنامه های خود برنامه ریزی می کنید؟ استفاده از تایپ اسکریپت به شما کمک می کند تا از همان روز اول پروژه خود را به درستی ساختار دهید، و تضمین می کند که در برخی از مراحل حساس شرکت خود زیر بار بدهی های فنی له نخواهید شد. در این دوره آموزشی، نحوه نوشتن کدهای قابل استفاده مجدد را با تأکید فراوان بر استفاده از کلاس ها و رابط ها برای ساختن ابزارک های قابل تعویض یاد خواهید گرفت. می‌توانید برنامه‌های خود را در لحظه پیکربندی مجدد کنید تا ویژگی‌های بسیار متفاوتی را تنها با حداقل تلاش ایجاد کنید

از کسی که روی یکی از بزرگترین پروژه های Typescript در اطراف کار کرده است بیاموزید. در پروژه های حرفه ای خودم، پلاگین هایی را برای یک ویرایشگر کد منبع باز و مبتنی بر مرورگر به نام Theia توسعه داده ام. پروژه Theia از نظر مقیاس کاملاً عظیم است و صدها هزار خط کد را در بر می گیرد که همه با تایپ اسکریپت نوشته شده اند. این پروژه فقط به لطف قدرت Typescript کار می کند.

اما فقط حرف من را قبول نکنید - نظرات این دوره را بررسی کنید! خواهید دید که مهندسان دیگر، درست مانند شما، موفقیت بزرگی داشته اند و به درک جدیدی از نحوه ساخت برنامه های کاربردی وب مقیاس پذیر دست یافته اند.

--------------------

محتوای این دوره بسیار زیاد است که نمی‌توان آن را در چند کلمه خلاصه کرد، اما در اینجا فهرستی جزئی از مهارت‌های مختلفی وجود دارد که بر آنها مسلط خواهید شد:

  • درک کنید که چرا ترکیب در مقابل وراثت اشتباه‌ترین موضوع در انجمن جاوا اسکریپت است

  • با کار بر روی پروژه های دنیای واقعی بر ویژگی های اساسی Typescript تسلط پیدا کنید

  • ما از ابتدا یک فریم ورک front-end سفارشی می سازیم که می توانید به جای React یا Angular در پروژه های شخصی خود استفاده کنید

  • تقابل پیچیده بین کلاس‌ها و واسط‌ها را درک کنید و چرا این دو قطعه Typescript شما را قادر می‌سازد تا کد فوق‌العاده قابل استفاده مجدد بسازید

  • با دکوراتورها عمیق‌تر به Typescript شیرجه بزنید، که از آنها برای ایجاد یکپارچگی سفارشی بین Typescript و Express استفاده می‌کنیم

  • برنامه‌های React و Redux خود را با درک نحوه جفت کردن آنها با Typescript با اطمینان بیشتری ساختار دهید

  • با خواندن روان فایل‌های تعریف نوع، از اسناد کتابخانه‌های شخص ثالث رد شوید

  • با تجربه اینکه تایپ اسکریپت چقدر عمیق کد شما را برای خطاها تجزیه و تحلیل می کند، بدانید چقدر هوشمند است


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


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

شروع کار با Typescript Getting Started with Typescript

  • نحوه دریافت کمک How to Get Help

  • به انجمن ما بپیوندید! Join Our Community!

  • منابع دوره Course Resources

  • مرور کلی تایپ اسکریپت Typescript Overview

  • راه اندازی محیط Environment Setup

  • اطلاعات مهم نسخه Axios Important Axios Version Information

  • اولین برنامه A First App

  • اجرای کد تایپ اسکریپت Executing Typescript Code

  • یک تغییر سریع One Quick Change

  • گرفتن خطاها با تایپ اسکریپت Catching Errors with Typescript

  • گرفتن خطاهای بیشتر! Catching More Errors!

نوع سیستم چیست؟ What is a Type System?

  • رد نشوید - نمای کلی دوره Do Not Skip - Course Overview

  • انواع Types

  • بیشتر در مورد انواع More on Types

  • نمونه هایی از انواع Examples of Types

  • کجا از انواع استفاده می کنیم؟ Where Do We Use Types?

  • انواع Types

Annotations in Action را تایپ کنید Type Annotations in Action

  • Annotations and Inference را تایپ کنید Type Annotations and Inference

  • حاشیه نویسی با متغیرها Annotations with Variables

  • حاشیه نویسی های تحت اللفظی شی Object Literal Annotations

  • حاشیه نویسی در اطراف توابع Annotations Around Functions

  • درک استنتاج Understanding Inference

  • نوع "هر". The 'Any' Type

  • رفع نوع 'Any' Fixing the 'Any' Type

  • اولیه سازی با تاخیر Delayed Initialization

  • وقتی استنباط کار نمی کند When Inference Doesn't Work

حاشیه نویسی با توابع و اشیاء Annotations With Functions and Objects

  • بیشتر در مورد حاشیه نویسی در اطراف توابع More on Annotations Around Functions

  • استنتاج پیرامون توابع Inference Around Functions

  • حاشیه نویسی برای توابع ناشناس Annotations for Anonymous Functions

  • باطل و هرگز Void and Never

  • تخریب ساختار با حاشیه نویسی Destructuring with Annotations

  • حاشیه نویسی در اطراف اشیاء Annotations Around Objects

تسلط بر آرایه های تایپ شده Mastering Typed Arrays

  • آرایه ها در تایپ اسکریپت Arrays in Typescript

  • چرا آرایه های تایپ شده؟ Why Typed Arrays?

  • انواع متعدد در آرایه ها Multiple Types in Arrays

  • زمان استفاده از آرایه های تایپ شده When to Use Typed Arrays

تاپل ها در تایپ اسکریپت Tuples in Typescript

  • تاپل ها در تایپ اسکریپت Tuples in Typescript

  • تاپل ها در عمل Tuples in Action

  • چرا تاپل ها؟ Why Tuples?

رابط بسیار مهم The All-Important Interface

  • رابط ها Interfaces

  • حاشیه نویسی های نوع طولانی Long Type Annotations

  • رفع حاشیه نویسی های طولانی با رابط ها Fixing Long Annotations with Interfaces

  • نحو در اطراف رابط ها Syntax Around Interfaces

  • توابع در رابط ها Functions in Interfaces

  • استفاده مجدد از کد با رابط ها Code Reuse with Interfaces

  • طرح کلی با رابط ها General Plan with Interfaces

  • رابط ها Interfaces

عملکرد ساختمان با کلاس ها Building Functionality with Classes

  • کلاس ها Classes

  • ارث اساسی Basic Inheritance

  • اصلاح کننده های روش نمونه Instance Method Modifiers

  • فیلدها در کلاس ها Fields in Classes

  • فیلدهای دارای ارث Fields with Inheritance

  • محل استفاده از کلاس ها Where to Use Classes

الگوهای طراحی با تایپ اسکریپت Design Patterns with Typescript

  • دستورالعمل بسته به روز شد Updated Parcel Instructions

  • نمای کلی برنامه App Overview

  • بسته بندی با بسته Bundling with Parcel

  • ساختار پروژه Project Structure

  • اطلاعات مهم درباره نصب Faker IMPORTANT Info About Faker Installation

  • تولید داده های تصادفی Generating Random Data

  • فایل های تعریف را تایپ کنید Type Definition Files

  • استفاده از نوع فایل های تعریف Using Type Definition Files

  • بیانیه های صادراتی در تایپ اسکریپت Export Statements in Typescript

  • تعریف شرکت Defining a Company

  • توجه داشته باشید در مورد ایجاد یک کلید API Note on Generating an API Key

  • افزودن پشتیبانی Google Maps Adding Google Maps Support

  • به‌روزرسانی مورد نیاز برای کتابخانه جدید @types Required Update for New @types Library

  • ادغام نقشه های گوگل Google Maps Integration

  • کاوش در فایل های تعریف نوع Exploring Type Definition Files

  • قابلیت پنهان کردن Hiding Functionality

  • چرا از اصلاح کننده های خصوصی استفاده کنیم؟ در اینجا چرا Why Use Private Modifiers? Here's Why

  • اضافه کردن نشانگرها Adding Markers

  • کد تکراری Duplicate Code

  • یک راه حل ممکن One Possible Solution

  • محدود کردن دسترسی با رابط ها Restricting Access with Interfaces

  • بررسی نوع ضمنی Implicit Type Checks

  • نمایش پنجره های پاپ آپ Showing Popup Windows

  • به روز رسانی تعاریف رابط Updating Interface Definitions

  • بندهای اجرایی اختیاری Optional Implements Clauses

  • جمع بندی برنامه App Wrapup

بیشتر در مورد الگوهای طراحی More on Design Patterns

  • نمای کلی برنامه App Overview

  • پیکربندی کامپایلر TS Configuring the TS Compiler

  • تدوین و اجرا همزمان Concurrent Compilation and Execution

  • یک الگوریتم مرتب سازی ساده A Simple Sorting Algorithm

  • داربست جداکننده Sorter Scaffolding

  • پیاده سازی مرتب سازی Sorting Implementation

  • دو مسئله بزرگ Two Huge Issues

  • Typescript واقعا هوشمند است Typescript is Really Smart

  • تایپ گارد Type Guards

  • چرا این بد است؟ Why is This Bad?

  • استخراج منطق کلید Extracting Key Logic

  • جداسازی مبادله و مقایسه Separating Swapping and Comparison

  • فاش شدن بزرگ The Big Reveal

  • تعریف رابط Interface Definition

  • مرتب سازی مجموعه های دلخواه Sorting Arbitrary Collections

  • پیاده سازی لیست پیوندی Linked List Implementation

  • کد لیست پیوندی تکمیل شده Completed Linked List Code

  • فقط...یک...بیشتر...رفع... Just...One...More...Fix...

  • ادغام روش مرتب سازی Integrating the Sort Method

  • مسائل مربوط به ارث Issues with Inheritance

  • کلاس های چکیده Abstract Classes

  • چرا از کلاس های انتزاعی استفاده کنیم؟ Why Use Abstract Classes?

  • حل تمام مسائل با کلاس های انتزاعی Solving All Issues with Abstract Classes

  • رابط ها در مقابل کلاس های انتزاعی Interfaces vs Abstract Classes

کد قابل استفاده مجدد Reusable Code

  • بررسی اجمالی پروژه Project Overview

  • راه اندازی پروژه Project Setup

  • داده های CSV CSV Data

  • تایپ فایل های تعریف - دوباره! Type Definition Files - Again!

  • خواندن فایل های CSV Reading CSV Files

  • اجرای یک تحلیل Running an Analysis

  • از دست دادن متن مجموعه داده Losing Dataset Context

  • استفاده از Enums Using Enums

  • زمان استفاده از Enums When to Use Enums

  • استخراج CSV Reading Extracting CSV Reading

  • انواع داده ها Data Types

  • تبدیل رشته های تاریخ به تاریخ Converting Date Strings to Dates

  • تبدیل مقادیر ردیف Converting Row Values

  • اظهارات را تایپ کنید Type Assertions

  • توصیف یک ردیف با یک تاپل Describing a Row with a Tuple

  • هنوز با FileReader انجام نشده است! Not Done with FileReader Yet!

  • درک Refactor #1 Understanding Refactor #1

  • ایجاد کلاس های انتزاعی Creating Abstract Classes

  • انواع متغیر با ژنریک Variable Types with Generics

  • اعمال یک نوع در یک کلاس عمومی Applying a Type to a Generic Class

  • Refactor جایگزین Alternate Refactor

  • رویکرد مبتنی بر رابط Interface-Based Approach

  • استخراج منابع مسابقه - دوباره! Extracting Match References - Again!

  • تبدیل داده ها Transforming Data

  • به روز رسانی مراجع Reader Updating Reader References

  • وراثت در مقابل ترکیب Inheritance vs Composition

  • بیشتر در مورد وراثت در مقابل ترکیب More on Inheritance vs Composition

  • یک تصور غلط بزرگ در مورد ترکیب بندی A Huge Misconception Around Composition

  • هدف حرکت رو به جلو Goal Moving Forward

  • یک رویکرد مبتنی بر ترکیب A Composition-Based Approach

  • پیاده سازی کلاس آنالایزر Implementing an Analyzer Class

  • ساخت گزارشگر Building the Reporter

  • همه اش را بگذار کنار هم Putting It All Together

  • تولید گزارش های HTML Generating HTML Reports

  • یه چیز دیگه! One Last Thing!

  • اوه، بد من Oops, My Bad

  • جمع بندی برنامه App Wrapup

ژنریک های پیشرفته Advanced Generics

  • اطلاعات بیشتر در مورد Generics More on Generics

  • Inference را با Generics تایپ کنید Type Inference with Generics

  • تابع ژنریک Function Generics

  • محدودیت های عمومی Generic Constraints

بیایید یک چارچوب وب بسازیم Let's Build a Web Framework

  • نمای کلی برنامه App Overview

  • راه اندازی بسته Parcel Setup

  • ساختار چارچوب Framework Structure

  • طراحی کاربر Designing the User

  • بازیابی ویژگی های کاربر Retrieving User Properties

  • ویژگی های رابط اختیاری Optional Interface Properties

  • یک سیستم رویداد An Eventing System

  • پشتیبانی شنونده Listener Support

  • ذخیره شنوندگان رویداد Storing Event Listeners

  • ایجاد آرایه پویا Dynamic Array Creation

  • راه اندازی تماس های رویداد Triggering Event Callbacks

  • افزودن سرور JSON Adding JSON Server

  • درک کنوانسیون های REST Understanding REST Conventions

  • افزودن قابلیت Fetch Adding Fetch Functionality

  • واکشی با موفقیت داده های مدل Successfully Fetching Model Data

  • ذخیره اطلاعات کاربر Saving User Data

  • Refactoring با ترکیب Refactoring with Composition

  • ادغام مجدد رویداد Re-Integrating Eventing

  • ترکیب با اشیاء تودرتو Composition with Nested Objects

  • استخراج پیچیده تر A More Complicated Extraction

  • گزینه هایی برای تطبیق همگام سازی Options for Adapting Sync

  • Refactoring Sync Refactoring Sync

  • محدودیت های عمومی در اطراف همگام سازی Generic Constraints Around Sync

  • اتصال همگام سازی بازگشت به کاربر Connecting Sync Back to User

  • ویژگی های اختیاری Optional Properties

  • استخراج یک کلاس ویژگی ها Extracting an Attributes Class

  • کاستی روش دریافت The Get Method's Shortcoming

  • دو قانون مهم Two Important Rules

  • یک محدودیت عمومی پیشرفته An Advanced Generic Constraint

  • ادغام مجدد ویژگی ها Re-Integrating Attributes

  • ترکیب هیئت است Composition is Delegation

  • یادآوری در Accessors Reminder on Accessors

  • روش های عبور Passthrough Methods

  • یک موضوع زمینه A Context Issue

  • تنظیم داده در حین راه اندازی Setting Data While Triggering

  • واکشی داده های کاربر Fetching User Data

  • ذخیره داده ها Saving Data

  • ترکیب در مقابل وراثت...دوباره! Composition vs Inheritance...Again!

  • استخراج یک کلاس مدل Extracting a Model Class

  • گسترش کاربر Extending the User

  • کاربر نهایی Refactor Final User Refactor

  • بسته بندی مدل Model Wrapup

  • روش های عبور کوتاه شده Shortened Passthrough Methods

  • مجموعه کاربران Users Collection

  • پیاده سازی مجموعه کاربران Implementing a Users Collection

  • تجزیه کاربر JSON Parsing User JSON

  • مجموعه کاربر عمومی Generic User Collection

  • یک روش کلاسی برای مجموعه ها A Class Method for Collections

  • مشاهده کلاس ها View Classes

  • ساخت UserForm Building the UserForm

  • روش رندر UserForm The UserForm's Render Method

  • رندر HTML Rendering HTML

  • تعریف نقشه رویدادها Defining an Events Map

  • Binding Event Handlers Binding Event Handlers

  • افزودن ویژگی های مدل Adding Model Properties

  • رویدادهای الزام آور در نام کلاس Binding Events on Class Name

  • افزودن متدها به کاربر Adding Methods to the User

  • رندر مجدد در تغییر مدل Re-Rendering on Model Change

  • خواندن متن ورودی Reading Input Text

  • چک های تهی دقیق Strict Null Checks

  • منطق نمایش قابل استفاده مجدد Reusable View Logic

  • استخراج یک کلاس View Extracting a View Class

  • گسترش با محدودیت های عمومی Extending with Generic Constraints

  • ذخیره داده ها از یک نما Saving Data From a View

  • UserEdit و UserShow UserEdit and UserShow

  • لانه سازی با مناطق Nesting with Regions

  • نقشه برداری مناطق Mapping Regions

  • آزمایش نقشه برداری منطقه Testing Region Mapping

  • مشاهده Nesting View Nesting

  • نماهای مجموعه Collection Views

  • پیاده سازی CollectionView CollectionView Implementation

  • جمع بندی برنامه App Wrapup

ادغام Express + Typescript Express + Typescript Integration

  • تایپ اسکریپت با کتابخانه های JS Typescript with JS Libraries

  • نمای کلی برنامه App Overview

  • راه اندازی پروژه Project Setup

  • مسیرهای اصلی با اکسپرس Basic Routes with Express

  • استفاده از روتر اکسپرس Using an Express Router

  • تجزیه فرم بدن Parsing Form Bodies

  • چرا Express با TS خوب بازی نمی کند؟ Why Doesn't Express Play Nicely with TS?

  • مشکلات مربوط به فایل های تعریف نوع Issues with Type Definition Files

  • برخورد با Defs نوع ضعیف Dealing with Poor Type Defs

  • سیم کشی جلسات Wiring Up Sessions

  • بررسی وضعیت ورود Checking Login Status

  • خروج از سیستم Logging Out

  • حفاظت از مسیرها Protecting Routes

  • یکپارچگی نزدیکتر A Closer Integration

  • فرآیند بازسازی The Refactoring Process

  • یادآوری نمونه های اولیه Prototypes Reminder

دکوراتورها Decorators

  • نکته در مورد محیط هدف در tsconfig Note about target environment in tsconfig

  • دکوراتورها در تایپ اسکریپت Decorators in Typescript

  • جزئیات در مورد دکوراتورها Details on Decorators

  • توصیفگرهای دارایی Property Descriptors

  • روشهای بسته بندی با توصیفگرها Wrapping Methods with Descriptors

  • کارخانه های دکوراتور Decorator Factories

  • دکوراتورها در اطراف املاک Decorators Around Properties

  • اطلاعات بیشتر در مورد دکوراتورها More on Decorators

ادغام پیشرفته Express و TS Advanced Express and TS Integration

  • سلب مسئولیت سریع A Quick Disclaimer

  • بررسی اجمالی پروژه Project Overview

  • چرا این سخت است؟ Why is This Hard?

  • بررسی اجمالی راه حل Solution Overview

  • نکته در مورد محیط هدف در tsconfig Note about target environment in tsconfig

  • مبانی فراداده Basics of Metadata

  • فراداده عملی Practical Metadata

  • بیایید Refactor! Let's Refactor!

  • "دریافت" دکوراتور The 'Get' Decorator

  • دکوراتور کنترلر The Controller Decorator

  • اثبات مفهوم Proof of Concept

  • چند مشکل A Few Fixups

  • تعریف RouteBinder Defining a RouteBinder

  • مجموعه روش های بسته با Enums Closed Method Sets with Enums

  • کلیدهای فراداده Metadata Keys

  • دکوراتور "استفاده" The 'Use' Decorator

  • استفاده آزمایشی Testing Use

  • اعتبار سنجی بدن Body Validators

  • اعتبار سنجی خودکار Automated Validation

  • تست اعتبار سنجی خودکار Testing Automated Validation

  • رفع مسیرها Fixing Routes

  • استفاده از توصیفگرهای ویژگی برای بررسی نوع Using Property Descriptors for Type Checking

  • جمع بندی برنامه App Wrapup

React و Redux با Typescript React and Redux with Typescript

  • بررسی اجمالی React و Redux React and Redux Overview

  • نمای کلی برنامه App Overview

  • تولید برنامه Generating the App

  • اجزای ساده Simple Components

  • رابط با Props Interfaces with Props

  • رسیدگی به وضعیت جزء Handling Component State

  • حالت جزء گیج کننده! Confusing Component State!

  • اجزای عملکردی Functional Components

  • تنظیم Redux Redux Setup

  • Action Creators با Typescript Action Creators with Typescript

  • انواع اقدام Enum Action Types Enum

  • تابع توزیع عمومی The Generic Dispatch Function

  • کاهش دهنده با Enums A Reducer with Enums

  • اعتبارسنجی ساختار فروشگاه Validating Store Structure

  • اتصال یک کامپوننت به Redux Connecting a Component to Redux

  • ارائه یک لیست Rendering a List

  • افزودن قابلیت حذف Adding in Delete Functionality

  • شکستن اکشن سازندگان Breaking Out Action Creators

  • بیان کنش ها به صورت Type Union Expressing Actions as Type Union

  • محافظ ها را در کاهنده ها تایپ کنید Type Guards in Reducers

  • سیم کشی deleteToDo Action Wiring up deleteToDo Action

  • باز هم فایل های تعریف را تایپ کنید Again, Type Definition Files

  • ردیابی بارگیری با حالت مؤلفه Tracking Loading with Component State

  • جمع بندی برنامه App Wrapup

موارد اضافی Extras

  • جایزه! Bonus!

نمایش نظرات

آموزش تایپ اسکریپت: راهنمای کامل توسعه دهنده
جزییات دوره
24.5 hours
286
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
67,291
4.7 از 5
دارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Stephen Grider Stephen Grider

معمار مهندسی