تأكيدات const باستخدام as const
جمّدوا الكائنات والمصفوفات في أنواع حرفية غير قابلة للكتابة بعمق
تأكيدات const باستخدام as const درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
تأكيد as const
يخبر تأكيد const، المكتوب بصيغة as const، TypeScript باستنتاج النوع الأكثر تحديدًا، مع جعل readonly عميقًا للقيمة. تصبح خصائص الكائن قيمًا حرفية وغير قابلة للتغيير، وتصبح المصفوفات tuples للقراءة فقط.
const point = { x: 10, y: 20 } as const;
// type: { readonly x: 10; readonly y: 20 }
console.log(point.x, point.y);من دون as const
من دون هذا التأكيد، تتوسع أنواع خصائص الكائنات. يستنتج { x: 10 } أن x: number، وتبقى الخاصية قابلة للتغيير. قارن ذلك بالمشهد السابق لترى ما الذي يغيره as const.
const a = { x: 10 }; // x: number, mutable
const b = { x: 10 } as const; // x: 10, readonly
a.x = 99; // allowed
console.log(a.x, b.x);تثبيت الخصائص كقيم حرفية
يحوّل as const كل خاصية نصية إلى نوعها الحرفي. وهذا مفيد جدًا لكائنات الإعدادات التي يجب أن تبقى مفاتيحها وقيمها دقيقة.
const config = {
env: 'production',
retries: 3
} as const;
// env: 'production', retries: 3
console.log(config.env, config.retries);readonly يمنع التغيير
بما أن as const يجعل الخصائص readonly، يمنع المترجم إعادة الإسناد. تصبح القيمة غير قابلة للتغيير على مستوى النوع، مما يحميها من التغييرات غير المقصودة.
const settings = { mode: 'dark' } as const;
console.log(settings.mode);
// settings.mode = 'light'; // Error: readonly propertyتأكيدات const على المصفوفات
عند تطبيق as const على مصفوفة، فإنه ينتج tuple للقراءة فقط من الأنواع الحرفية. يصبح الطول ثابتًا، ويحافظ كل عنصر على قيمته الدقيقة.
const colors = ['red', 'green', 'blue'] as const;
// type: readonly ['red', 'green', 'blue']
console.log(colors[0], colors.length);لا تغيير في المصفوفات للقراءة فقط
يرفض tuple للقراءة فقط أساليب التغيير مثل push أو الإسناد إلى فهرس. تصبح البيانات مقفلة، وهذا بالضبط ما تحتاجه لجداول البحث الثابتة.
const days = ['Mon', 'Tue', 'Wed'] as const;
console.log(days.join(', '));
// days.push('Thu'); // Error: push does not exist on readonly tupleاشتقاق اتحاد باستخدام typeof arr[number]
نمط قوي: خذ مصفوفة readonly واشتق اتحادًا من أنواع عناصرها باستخدام typeof arr[number]. تكتب القيم مرة واحدة وتحصل على اتحاد حرفي تلقائيًا.
const ROLES = ['admin', 'editor', 'viewer'] as const;
type Role = typeof ROLES[number];
// 'admin' | 'editor' | 'viewer'
const r: Role = 'editor';
console.log(r);مصدر واحد للحقيقة
يضمن ذلك بقاء مصفوفة التشغيل ونوعها متزامنين. أضف قيمة إلى المصفوفة، وسيتحدث الاتحاد تلقائيًا — من دون قوائم مكررة تحتاج إلى صيانتها.
const SIZES = ['S', 'M', 'L', 'XL'] as const;
type Size = typeof SIZES[number];
function pick(s: Size): void {
console.log('Picked', s);
}
pick('M');تأكيدات const على Tuples
بالنسبة إلى tuples التي تختلف أنواع عناصرها، يحافظ as const على الأنواع الدقيقة والترتيب معًا، وينتج tuple دقيقًا للقراءة فقط.
const pair = [1, 'one'] as const;
// type: readonly [1, 'one']
console.log(pair[0], pair[1]);سلوك readonly العميق
يُطبَّق as const بشكل عميق. تصبح الكائنات والمصفوفات المتداخلة أيضًا للقراءة فقط، مع أنواع حرفية تمتد حتى أعمق مستوى.
const data = {
name: 'app',
tags: ['a', 'b']
} as const;
// tags is readonly ['a', 'b']
console.log(data.name, data.tags[1]);تأكيدات const للتعدادات
يمثل كائن const مع اتحاد مشتق بديلًا خفيفًا عن enum. تحصل على قيم حرفية أثناء التشغيل ونوع دقيق، من دون أي تعليمات برمجية إضافية ناتجة.
const Status = {
Idle: 'idle',
Active: 'active'
} as const;
type Status = typeof Status[keyof typeof Status];
const s: Status = Status.Active;
console.log(s);تحقق سريع
اختبر مدى فهمك لتأكيدات const.
مراجعة: as const
تعلمت أن as const:
- يستنتج النوع الحرفي الأكثر تحديدًا، مع جعل readonly عميقًا.
- يحوّل خصائص الكائنات إلى حقول حرفية للقراءة فقط.
- يحوّل المصفوفات إلى tuples للقراءة فقط من القيم الحرفية.
- يتيح اشتقاق الاتحادات باستخدام
typeof arr[number]، مما يحافظ على تزامن القيم والأنواع.
بعد ذلك، سنجمع القيم الحرفية في اتحادات معبّرة.
const LEVELS = ['low', 'mid', 'high'] as const;
type Level = typeof LEVELS[number];
const chosen: Level = 'mid';
console.log(chosen);الأسئلة الشائعة
هل درس «تأكيدات const باستخدام as const» مجاني؟
نعم — نص درس «تأكيدات const باستخدام as const» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «تأكيدات const باستخدام as const»؟
جمّدوا الكائنات والمصفوفات في أنواع حرفية غير قابلة للكتابة بعمق تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «تأكيدات const باستخدام as const»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أنواع القيم الحرفية النصية والرقمية
- القيم المنطقية الحرفية واستنتاج النوع
- تأكيدات const باستخدام as const
- دمج القيم الحرفية في اتحادات