0Pricing
TypeScript Academy · درس

نوع any ولماذا يجب تجنّبه

افهم نوع any ومتى يُفقد TypeScript غرضها

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

مرحبًا

النوع `any` هو وسيلة هروب في TypeScript، إذ يعطل جميع عمليات التحقق من الأنواع لمتغير معين. في هذا الدرس، ستفهم متى يظهر هذا النوع ولماذا ينبغي تقليل استخدامه.

ما الذي يفعله any

يمكن لمتغير من النوع `any` أن يحتوي على أي قيمة، كما يدعم أي عملية. وتتوقف TypeScript عن التحقق منه تمامًا.
let x: any = 5;
x = 'hello';       // OK
x = true;          // OK
x.nonExistent();   // No error — but crashes at runtime!

كيف ينتشر any

يؤدي إسناد متغير من النوع `any` إلى متغير محدد النوع إلى تلويث المتغير محدد النوع. وينتشر `any` بصمت في قاعدة التعليمات البرمجية.
let data: any = fetchData();
let name: string = data.name; // name is now effectively any

متى تستنتج TypeScript النوع any

إذا أعلنت عن متغير من دون قيمة ابتدائية ومن دون تعيين نوع، تستنتج TypeScript أن نوعه هو `any`. فعّل `noImplicitAny` لتحويل ذلك إلى خطأ وقت الترجمة.
let value; // inferred as any — dangerous!
value = 42;
value = 'hello';

// Fix:
let value2: number;

العلامة noImplicitAny

يفرض خيار المترجم `noImplicitAny`، المفعّل بواسطة `strict`، تعيين الأنواع بدل الرجوع تلقائيًا إلى `any`.
// tsconfig.json
{ "compilerOptions": { "noImplicitAny": true } }

// Now this is an error:
function process(data) { } // Error: Parameter has implicit any type

الاستخدامات المشروعة لـ any

أحيانًا لا يمكن تجنب `any`، مثل حالات ترحيل JavaScript، أو التعامل مع مكتبات خارجية لا توفر أنواعًا، أو العمل مع بيانات ديناميكية فعلًا. استخدمه باعتدال وفي نطاق محلي.
// Acceptable: narrow scope, clearly documented
function parseJson(raw: string): any {
  return JSON.parse(raw); // validate with Zod afterwards
}

تأكيدات الأنواع كبديل

بدلًا من `any`، استخدم تأكيدات الأنواع (`as Type`) عندما تعرف عن النوع أكثر مما يعرفه المترجم. فهذا أكثر أمانًا لأنك تلتزم بنوع محدد.
const raw = JSON.parse(text) as { name: string; age: number };
console.log(raw.name); // typed correctly

any مقابل object

يقبل النوع `object` أي قيمة غير بدائية، لكنه لا يسمح بالوصول العشوائي إلى الخصائص، بخلاف `any`. ويوفر بذلك طبقة صغيرة من الأمان.
let o: object = { x: 1 };
// o.x; // Error — object doesn't allow property access

let a: any = { x: 1 };
a.x; // OK — but no safety

يعطل any الإكمال التلقائي

إضافة إلى تقليل الأمان، يؤدي استخدام `any` إلى إسكات الإكمال التلقائي والتنقل في بيئة التطوير المتكاملة. وستفقد جميع مزايا أدوات التطوير التي توفرها TypeScript.

استبدال any بـ unknown

بالنسبة إلى البيانات الخارجية التي لا تتحكم فيها، فضّل `unknown`. فهو يجبرك على تضييق النوع قبل استخدامه، بخلاف `any` الذي يتيح لك إجراء أي عملية.
let input: unknown = getInput();
// input.toUpperCase(); // Error — must narrow first
if (typeof input === 'string') {
  console.log(input.toUpperCase()); // OK
}

ميزانية any

اعتبر `any` دينًا تقنيًا. فكل استخدام له يجعل قاعدة التعليمات البرمجية أقل أمانًا. اهدف إلى عدم وجود أي أنواع `any` في تعليمات الإنتاج البرمجية. واستخدم قاعدة ESLint ‏@typescript-eslint/no-explicit-any.

تحقق سريع

ما خيار المترجم الذي يجعل TypeScript تبلغ عن خطأ عندما يكون لمتغير نوع `any` ضمني؟

مراجعة

يعطل النوع `any` التحقق من الأنواع في TypeScript وينتشر عبر التعليمات البرمجية. فعّل noImplicitAny، واستبدل `any` بـ `unknown` للبيانات الخارجية، واستخدم تأكيدات الأنواع في الحالات المحددة.

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

هل درس «نوع any ولماذا يجب تجنّبه» مجاني؟

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

ماذا ستتعلم في «نوع any ولماذا يجب تجنّبه»؟

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

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

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

كم من الوقت يستغرق درس «نوع any ولماذا يجب تجنّبه»؟

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

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

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

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

  1. الأنواع البدائية: string وnumber وboolean
  2. نوع any ولماذا يجب تجنّبه
  3. unknown مقابل any: الخيار الأكثر أماناً
  4. null وundefined والتحقق الصارم من null
← العودة إلى TypeScript Academy