لماذا يهم TypeScript المتقدم
يحتوي نظام TypeScript على نظام نوعي يعتمد على التورنج. باستخدام نمطات متقدمة، يمكنك اكتشاف فئات كاملة من الأخطاء في وقت التجميع، مما يجعل الأخطاء في وقت التشغيل أمرًا مستحيلًا للكود النوعي بشكل جيد.
أنواع مُسممة
يمنع أنواع المُسممة 混وخ القيم التي لها نفس النوع الأساسي ولكن مع معاني مختلفة.
type UserId = string & { readonly __brand: "UserId" };
type OrderId = string & { readonly __brand: "OrderId" };
function getUser(id: UserId) { /* ... */ }
function getOrder(id: OrderId) { /* ... */ }
const userId = "user-123" as UserId;
const orderId = "order-456" as OrderId;
getUser(orderId); // خطأ! لا يمكن تحويل النوع 'OrderId' إلى 'UserId'
أنواع نصوص شريطية
إنتاج أنواع آمنة من النوع النصي بشكل تلقائي.
type EventName = "click" | "hover" | "focus";
type HandlerName = `on${Capitalize<EventName>}`;
// النتيجة: "onClick" | "onHover" | "onFocus"
الاتحادات المُفرقة
نمذجة الآلات الحالة بشكل مباشر في نظام النوع.
type AsyncState<T> =
| { status: "idle" }
| { status: "loading" }
| { status: "success"; data: T }
| { status: "error"; error: Error };
أنواع مشروطة
إنشاء أنواع تعتمد على أنواع أخرى.
type ApiResponse<Endpoint> =
Endpoint extends "/users" ? User[] :
Endpoint extends `/users/${string}` ? User : never;
الاستنتاج
نمطات TypeScript المتقدمة تمنع الأخطاء في وقت التجميع. ابدأ بأنواع المُسممة والاتحادات المُفرقة — أنها توفر القيمة الأكبر مع أقل تعقيد.