پشتیبانی از TypeScript در Node.js

Node.js از دو روش برای اجرای فایل‌های TypeScript پشتیبانی می‌کند: استفاده از بسته‌های شخص ثالث برای پشتیبانی کامل از تمام ویژگی‌های TypeScript، یا استفاده از قابلیت داخلی برای حذف نوع‌ها (type stripping) که سبک‌تر است. در حالت داخلی، Node.js تنها نوع‌ها را حذف می‌کند و هیچ بررسی یا تبدیل پیچیده‌ای انجام نمی‌دهد. برای استفاده از تمام قابلیت‌های TypeScript، از ابزارهایی مانند tsx یا سایر کتابخانه‌های مشابه باید استفاده شود.

TypeScript runtime supporttype strippingimport typesource maps

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۹ دی ۱۴۰۴

1. فعال‌سازی پشتیبانی TypeScript


  • پشتیبانی کامل: با نصب بسته‌های شخص ثالث مانند tsx می‌توان تمام ویژگی‌های TypeScript را اجرا کرد.
  • حذف نوع‌ها (type stripping): Node.js به‌طور داخلی نوع‌ها را حذف می‌کند و کد را بدون بررسی اجرا می‌کند.

// نصب tsx
npm install --save-dev tsx

// اجرای فایل TypeScript
npx tsx your-file.ts

2. Type Stripping


در این حالت، Node.js تنها نوع‌های قابل حذف را پاک می‌کند و هیچ تبدیل پیچیده‌ای انجام نمی‌دهد. برای ویژگی‌هایی مانند enum یا parameter properties باید فلگ --experimental-transform-types فعال شود.


// تنظیمات پیشنهادی tsconfig.json
{
  "compilerOptions": {
    "noEmit": true,
    "target": "esnext",
    "module": "nodenext",
    "rewriteRelativeImportExtensions": true,
    "erasableSyntaxOnly": true,
    "verbatimModuleSyntax": true
  }
}

3. تعیین سیستم ماژول


  • .ts: مانند فایل‌های .js بسته به فیلد type در package.json.
  • .mts: همیشه ES Module.
  • .cts: همیشه CommonJS.
  • .tsx: پشتیبانی نمی‌شود.

پسوند فایل‌ها در import و require الزامی است.


4. ویژگی‌های TypeScript


  • ویژگی‌هایی مانند enum، namespace با کد اجرایی و parameter properties نیاز به تبدیل دارند.
  • ویژگی‌هایی مانند namespace فقط برای type پشتیبانی می‌شوند.
  • Decorators پشتیبانی نمی‌شوند و خطا ایجاد می‌کنند.

5. Importing Types


برای جلوگیری از خطا باید از کلیدواژه type استفاده شود:


// صحیح
import type { Type1, Type2 } from './module.ts';
import { fn, type FnParams } from './fn.ts';

// خطا
import { Type1, Type2 } from './module.ts';
import { fn, FnParams } from './fn.ts';

6. ورودی‌های غیر فایل


Type stripping برای --eval و STDIN فعال می‌شود. اما در REPL یا inspect پشتیبانی نمی‌شود.


7. Source Maps


در حالت حذف نوع‌ها، نیازی به source map نیست. اما اگر --experimental-transform-types فعال شود، source map به‌طور پیش‌فرض فعال می‌شود.


8. محدودیت‌ها


  • Node.js فایل‌های TypeScript داخل node_modules را اجرا نمی‌کند.
  • تنظیمات tsconfig مانند paths پشتیبانی نمی‌شوند.
  • بهترین جایگزین برای paths استفاده از subpath imports با پیشوند # است.

نتیجه‌گیری


پشتیبانی از TypeScript در Node.js به دو شکل ارائه می‌شود: استفاده از ابزارهای شخص ثالث برای پشتیبانی کامل، یا استفاده از قابلیت داخلی حذف نوع‌ها برای اجرای سریع و سبک. انتخاب بین این دو بستگی به نیاز پروژه دارد؛ برای توسعه و تست می‌توان از type stripping استفاده کرد، اما برای پروژه‌های بزرگ و پیچیده بهتر است از ابزارهای کامل مانند tsx بهره برد.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه