0Pricing
TypeScript Academy · درس

عامل النوع keyof

احصلوا على اتحاد مفاتيح نوع كائن باستخدام keyof

عامل النوع keyof درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مفاتيح النوع

يأخذ العامل keyof نوع كائن وينتج اتحادًا من مفاتيح خصائصه. وهو الأساس للوصول الآمن نوعيًا إلى الخصائص وأدوات المفاتيح العامة.

الاستخدام الأساسي لـ keyof

طبّق keyof على واجهة للحصول على اتحاد من أسماء مفاتيحها في صورة أنواع حرفية نصية.

interface User {
  id: number
  name: string
}
type UserKeys = keyof User // "id" | "name"
const k: UserKeys = "name"
console.log(k)

السماح بالمفاتيح الصحيحة فقط

لا يمكن لمتغير من النوع keyof T أن يحتوي إلا على أحد مفاتيح T الفعلية. ويكتشف TypeScript الأخطاء الإملائية والمفاتيح غير الصالحة وقت الترجمة.

interface User { id: number; name: string }
const valid: keyof User = "id"
// const bad: keyof User = "email" // Error: not a key of User
console.log(valid)

keyof مع typeof

اجمع بين keyof وtypeof للحصول على مفاتيح النوع المستنتج لقيمة ما. نحصل هنا على مفاتيح كائن إعدادات دون كتابة واجهة.

const config = { host: "localhost", port: 8080 }
type ConfigKey = keyof typeof config // "host" | "port"
const key: ConfigKey = "port"
console.log(config[key])

keyof مع توقيع فهرسة نصي

بالنسبة إلى نوع ذي توقيع فهرسة نصي، يكون keyof هو string | number، لأن أي مفتاح نصي مسموح، ولأن المفاتيح الرقمية تتحول إلى سلاسل نصية.

type Dict = { [key: string]: number }
type DictKeys = keyof Dict // string | number
const k: DictKeys = "anything"
console.log(k)

keyof مع توقيع فهرسة رقمي

بالنسبة إلى توقيع فهرسة رقمي، يكون keyof هو number فقط. ويتوافق ذلك مع طريقة إتاحة المصفوفات للفهارس الرقمية.

type NumDict = { [i: number]: string }
type NumKeys = keyof NumDict // number
const k: NumKeys = 0
console.log(k)

keyof مع نوع مصفوفة

ينتج عن تطبيق keyof على نوع مصفوفة اتحاد مفاجئ: الفهارس الرقمية، بالإضافة إلى جميع أسماء أساليب وخصائص المصفوفة مثل length وpush.

type ArrKeys = keyof string[]
// number | "length" | "push" | "map" | ... many more
const k: ArrKeys = "length"
console.log(k)

التكرار على المفاتيح بأمان

استخدم keyof لكتابة حلقات لا تتعامل إلا مع المفاتيح الصالحة. ويؤدي تحويل Object.keys إلى (keyof T)[] إلى الحفاظ على أمان الوصول المفهرس نوعيًا.

interface User { id: number; name: string }
const u: User = { id: 1, name: "Ada" }
const keys = Object.keys(u) as (keyof User)[]
for (const k of keys) console.log(k, u[k])

keyof في القيود العامة

يُقيّد معامل المفتاح العام عادةً باستخدام K extends keyof T. ويضمن ذلك وجود المفتاح فعلًا في الكائن.

function pluck<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]
}
const name = pluck({ id: 1, name: "Ada" }, "name")
console.log(name) // Ada

دمج مفاتيح متعددة

بما أن keyof T اتحاد، يمكنك تقاطعه أو تصفيته. تقبل الدالة هنا مصفوفة من المفاتيح الصالحة.

function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
  const out = {} as Pick<T, K>
  for (const k of keys) out[k] = obj[k]
  return out
}
console.log(pick({ a: 1, b: 2, c: 3 }, ["a", "c"]))

أهمية keyof

يحوّل keyof أسماء الخصائص إلى نوع يمكن التحقق منه، مما يتيح إنشاء دوال getter وsetter وmapper عامة لا يمكنها الإشارة إلى مفتاح غير موجود. ويُستخدم ذلك على نطاق واسع في TypeScript المتقدم.

interface Settings { theme: string; size: number }
function has<T>(obj: T, key: keyof T): boolean {
  return key in (obj as object)
}
console.log(has<Settings>({ theme: "x", size: 1 }, "theme"))

اختبار سريع

اختبر مدى فهمك لعامل keyof.

مراجعة

ينتج keyof T اتحادًا من مفاتيح خصائص T في صورة أنواع حرفية، مما يقصر المتغيرات على المفاتيح الصالحة. ويعيد string | number مع توقيعات الفهرسة النصية، وnumber مع توقيعات الفهرسة الرقمية. وعند إقرانه بـ typeof، يشتق المفاتيح من القيم؛ وعند إقرانه بالأنواع العامة (K extends keyof T)، يتيح إنشاء دوال getter وأدوات انتقاء وتكرار آمنة نوعيًا.

الأسئلة الشائعة

هل درس «عامل النوع keyof» مجاني؟

نعم — نص درس «عامل النوع keyof» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «عامل النوع keyof»؟

احصلوا على اتحاد مفاتيح نوع كائن باستخدام keyof تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «عامل النوع keyof»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. عامل النوع typeof
  2. عامل النوع keyof
  3. أنواع الوصول المفهرس
  4. دمج typeof وkeyof
← العودة إلى TypeScript Academy