Skip to content

گزینه‌های tsconfig توضیح داده شده

گزینه‌های tsconfig که واقعاً اهمیت دارند، گروه‌بندی‌شده بر اساس کار: سخت‌گیرانه‌کردن بررسی تایپ‌ها، تعیین سطح زبان و ماژول‌ها، کنترل خروجی تولیدشده، مپ‌کردن مسیرهای import، ساختار پروژه‌های چندگانه، و تنظیم بررسی‌های باقی‌مانده.

یک tsconfig به کامپایلر می‌گوید کدام فایل‌ها را بشامل شود و چقدر سخت‌گیر باشد. دو گزینه بیشترِ کار را انجام می‌دهند: target سطح تولید JavaScript را تعیین می‌کند، و strict بررسی‌های ایمنی را یک‌جا روشن می‌کند. گزینه‌های زیر آن‌هایی هستند که رفتار را تغییر می‌دهند؛ گزینه‌هایی که به‌صورت پیش‌فرض روشن‌اند علامت خورده‌اند. پیکربندی‌تان را از یک پایه مشتق کنید، بعد فقط موارد متفاوت را override کنید.

جدول مرجع · 55 مورد
55 of 55 rows
سخت‌گیری
کلید اصلی: strictNullChecks و noImplicitAny و چند مورد دیگر را هم‌زمان فعال می‌کند.
خطا روی پارامترها و متغیرهایی که تایپ آن‌ها قابل استنباط نیست (در غیر این صورت any می‌شدند).
null و undefined دیگر به هر تایپی قابل انتساب نیستند؛ باید صریحاً انتخابشان کنید.
پارامترهای تابع به‌صورت پادمتغیر (contravariant) بررسی می‌شوند؛ تایپ‌های ناامن پارامتر callback را می‌گیرد.
بررسی تایپ bind و call و apply در برابر پارامترهای اعلام‌شدهٔ تابع.
خطا وقتی پراپرتی کلاس مقدار اولیه ندارد و در سازنده هم مقداردهی نمی‌شود.
پراپرتی اختیاری { p?: T } دیگر انتساب صریح undefined را نمی‌پذیرد.
کلیدواژهٔ override روی اعضایی که عضو کلاس پایه را می‌پوشانند الزامی است.
خطا روی متغیرهای محلی اعلام‌شده‌ای که هرگز خوانده نمی‌شوند.
خطا روی پارامترهای اعلام‌شدهٔ تابع که هرگز خوانده نمی‌شوند.
خطا روی statement های عبارتی که اثری ندارند.
دسترسی با نقطه برای کلیدهای index signature ممنوع است؛ از براکت استفاده کنید (obj["key"]).
خطا وقتی یک مسیر کد مقدار برمی‌گرداند ولی مسیر دیگری برنمی‌گرداند.
خطا وقتی یک case بدون break به case بعدی می‌افتد.
زبان و ماژول‌ها
سطح تولید JavaScript (مثلاً ES2022)؛ targetهای جدیدتر تبدیل به سطح پایین‌تر کمتری نیاز دارند.
APIهای داخلی در دسترس (مثلاً ES2022، DOM، DOM.Iterable).
سیستم ماژولی که تولید می‌شود (مثلاً ESNext، CommonJS، NodeNext).
از قوانین واقعی Node پیروی می‌کند: هر فایل بر اساس نزدیک‌ترین package.json یا CJS یا ESM را انتخاب می‌کند، و importهای نسبی به پسوند فایل نیاز دارند.
مسیرهای import چگونه resolve می‌شوند (مثلاً bundler، node، nodenext).
یک فایل چگونه ماژول شمرده می‌شود: auto (با وجود import/export)، legacy، یا force (همیشه).
امپورت به سبک default از ماژول‌های CommonJS را ممکن می‌کند (در بیشتر راه‌اندازی‌ها پیش‌فرض true).
امپورت default از ماژول‌هایی که فقط مقدار نام‌دار export می‌کنند را ممکن می‌کند (فقط در سطح تایپ).
importها دقیقاً همان‌طور که نوشته شده‌اند emit می‌شوند؛ importهای فقط-تایپ باید از import type استفاده کنند (TS 5).
اجازه می‌دهد importها فایل‌های .json را به‌عنوان مقدار تایپ‌دار بارگذاری کنند.
فایل‌های .js را به‌عنوان ورودی کامپایل شامل می‌شود.
فایل‌های .js را هم تایپ-چک می‌کند و کامنت‌های JSDoc آن‌ها را می‌خواند؛ شامل allowJs می‌شود.
.tsx چطور کامپایل می‌شود: react-jsx (runtime خودکار)، react (React.createElement)، یا preserve.
پکیج‌های @types که خودکار شامل می‌شوند به این فهرست محدود می‌شوند؛ آرایهٔ خالی هیچ‌کدام را شامل نمی‌شود.
پوشه‌هایی که برای پکیج‌های @types اسکن می‌شوند، به‌جای همهٔ node_modules/@types در بالای درخت.
تضمین می‌کند هر فایل به‌تنهایی قابل ترنسپایل باشد (لازم برای bundlerها و esbuild).
تولید خروجی
کجا JavaScript کامپایل‌شده نوشته می‌شود.
ریشهٔ فایل‌های سورس؛ شکل درخت خروجی را پایدار نگه می‌دارد.
فایل‌های .js.map تولید می‌کند تا دیباگرها به TypeScript نگاشت شوند.
سورس‌مپ را به‌جای فایل .js.map به‌صورت کامنت داخل فایل .js قرار می‌دهد.
تعریف‌های تایپ .d.ts تولید می‌کند (برای کتابخانه‌ها لازم است).
فایل‌های .d.ts.map تولید می‌کند تا ویرایشگرها از تعریف‌ها به سورس TypeScript برگردند.
فقط فایل‌های .d.ts تولید می‌کند؛ JavaScript به یک bundler سپرده می‌شود (نیازمند declaration یا composite).
هلپرهایی مثل __rest را به‌جای تولید در هر فایل از tslib دوباره استفاده می‌کند.
for..of و spread و تخریب ساختار روی iterableها را وقتی target قدیمی‌تر از ES2015 است درست می‌کند.
کامنت‌ها را از JavaScript تولیدشده حذف می‌کند.
فقط تایپ-چک؛ هیچ فایلی نوشته نمی‌شود (وقتی bundler کار تولید را انجام می‌دهد).
مسیرها
یک پوشهٔ پایه برای resolve کردن ماژول‌های غیرنسبی.
پیشوندهای import را به مکان‌ها نگاشت می‌دهد، مثلاً { "@/*": ["src/*"] }.
چند پوشه را به‌عنوان یک ریشهٔ مجازی برای resolve کردن در نظر می‌گیرد.
ساختار پروژه
پروژه را برای project referenceهای قابل‌ساخت علامت می‌زند (declaration و incremental را فعال می‌کند).
به پروژه‌های tsconfig دیگر وابسته است تا buildها سریع‌تر و جدا باشند.
اطلاعات build را ذخیره می‌کند تا دفعهٔ بعد فایل‌های تغییرنکرده دوباره بررسی نشوند.
بررسی‌های دیگر
بررسی تایپ فایل‌های .d.ts را برای سرعت رد می‌کند (پیش‌فرض true).
خطا روی importهایی که با حروف بزرگ/کوچک واقعی نام فایل نمی‌خوانند.
دسترسی به آرایه و ایندکس T | undefined برمی‌گرداند، نه T.
فیلدهای کلاس با Object.defineProperty به‌جای انتساب ساده ساخته می‌شوند (پیش‌فرض true برای targetهای ES2022+).
سینتکس legacy دکوراتورها را فعال می‌کند که فریم‌ورک‌های قدیمی به آن نیاز دارند (پیش از استاندارد).
نام‌های کامل تایپ را در پیام‌های خطا به‌جای کوتاه‌کردن نمایش می‌دهد.
خطا وقتی یک import فقط-برای-عارضه (import "./x.css") به هیچ چیزی resolve نشود.
مسیرهای import منتهی به .ts را مجاز می‌کند (نیازمند noEmit یا emitDeclarationOnly).