TypeScript معمولاً بهعنوان یک ابزار بدون هزینه در زمان اجرا شناخته میشود.
اما واقعیت این است که نحوه استفاده شما از TypeScript میتواند روی:
حجم باندل
سرعت اجرا
تجربه توسعهدهنده
تأثیر مستقیم بگذارد.
در این مقاله، ترفندهایی را بررسی میکنیم که اغلب نادیده گرفته میشوند اما در پروژههای واقعی تفاوت محسوسی ایجاد میکنند.
const enum بهجای enumوقتی از enum معمولی استفاده میکنی، TypeScript در خروجی JavaScript یک object واقعی تولید میکند.
این یعنی:
کد بیشتر در باندل
دسترسی در runtime
اما در const enum:
const enum Status { Pending, Completed }
TypeScript مقدارها را مستقیماً جایگزین میکند و هیچ objectای ساخته نمیشود.
📌 نتیجه:
حجم کمتر
دسترسی سریعتر
اگر به reverse mapping یا iteration نیاز نداری، const enum انتخاب بهتری است.
در خیلی از موارد اصلاً نیازی به enum نداری.
type Direction = "Up" | "Down" | "Left" | "Right";
مزایا:
هیچ کدی در خروجی تولید نمیشود
سادهتر و خواناتر
کاملاً type-safe
📌 این یکی از سادهترین راهها برای کاهش حجم باندل است.
anyاستفاده از any فقط مشکل type safety نیست.
مشکلات پنهان:
inference را خراب میکند
refactor را سخت میکند
باعث خطاهای runtime میشود
بهتر است از unknown یا type دقیق استفاده کنی.
as constconst config = { mode: "dark" } as const;
بدون as const:
مقدارها به string عمومی تبدیل میشوند
با as const:
مقدارها literal میشوند
readonly میشوند
📌 نتیجه:
inference بهتر
جلوگیری از باگ
typeهای خیلی پیچیده (مثل genericهای تو در تو):
کامپایل را کند میکنند
IDE را سنگین میکنند
📌 قانون ساده:
اگر فهمیدنش سخته، احتمالاً زیادی پیچیدهست 😄
الگوی رایج:
export * from "./utils";
مشکل:
ممکن است tree-shaking بهدرستی کار نکند
کدهای استفادهنشده وارد باندل شوند
راه بهتر:
import { fn } from "./utils/fn";
isolatedModulesدر tsconfig:
{ "compilerOptions": { "isolatedModules": true } }
مزایا:
build سریعتر
سازگاری بهتر با ابزارهایی مثل esbuild و swc
type checking هزینهبر است.
بهتر است:
جدا اجرا شود
build سریعتر شود
مثلاً:
build با esbuild
type-check با tsc
readonlytype User = { readonly name: string; };
مزایا:
جلوگیری از تغییر ناخواسته
کمک به بهینهسازی در runtime
TypeScript در runtime وجود ندارد،
اما تصمیمهایی که با آن میگیری کاملاً واقعی هستند.
با چند تغییر ساده میتوانی:
باندل سبکتر داشته باشی
build سریعتر داشته باشی
کد maintainableتری بنویسی
TypeScript رایگان است، اما استفاده اشتباه از آن هزینه دارد.