هذان العاملان يتيحان لك اشتقاق أنواع من أنواع وقيم موجودة — الأساس لبرمجة مستوى النوع.
keyof — اتحاد مفاتيح نوع الكائن
ts
interface User { id: number; name: string; }
type = keyof ;
const config = { host: "localhost", port: 3000 };
type Config = typeof config; // { host: string; port: number }
typeof (في موضع النوع) يلتقط النوع المستنتج لقيمة وقت التشغيل، حتى لا تضطر إلى كتابة النوع بشكل منفصل.
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
const user = { id: 1, name: "Ann" };
getProp(user, "name"); // returns string
getProp(user, "age"); // ❌ Error: "age" is not a key of user
هنا K extends keyof T يقيد key إلى المفاتيح الفعلية، و T[K] (نوع وصول مفهرس) يعيد نوع القيمة بالضبط لهذا المفتاح. الأخطاء الإملائية تصبح أخطاء في وقت الترجمة.
const Roles = { Admin: "admin", User: "user" } as const;
type Role = typeof Roles[keyof typeof Roles]; // "admin" | "user"
keyof و typeof تربط عالم القيمة وعالم النوع.
تعطي قوة الوصول الآمن إلى الخصائص، واشتقاق الأنواع من الإعدادات/الثوابت (مصدر واحد للحقيقة)، وهي حجر الأساس للأنواع المعينة والشرطية.
هذه هي الطريقة التي تتجنب بها الحفاظ اليدوي على تعريفات النوع المتوازية.
مكتبة من أسئلة مقابلات تقنية المعلومات مع إجابات مفصّلة — من المبتدئ إلى المتقدم.
تبرع