الفرق بين == و === في TypeScript
مرحبًا بالجميع! أرجو التوضيح لمبتدئ في TypeScript: ما الفرق الجوهري بين العاملين == و ===؟ قرأت أن الأول في JavaScript يقوم بتحويل الأنواع (type coercion)، بينما الثاني يقوم بمقارنة صارمة (strict comparison)، لكن في TypeScript، كما أفهم، الأنواع يتم التحكم بها بشكل صارم من قبل المترجم (compiler).
إليك مثال يربكني:
const a: number = 5;
const b: string = "5";
if (a == b) {
console.log("متساوٍ باستخدام ==");
}
if (a === b) {
console.log("متساوٍ باستخدام ===");
}الـ if الأول يطبع رسالة، والثاني لا يطبع. كنت أتوقع أن TypeScript لن يسمح لي حتى بمقارنة number و string دون تحويل صريح (explicit conversion)، لكن الكود يتم تجميعه. لماذا يحدث هذا؟ أليس من المفترض أن TypeScript يخرج خطأ عند a == b؟ أم أن هذه خاصية من عمل الكتابة الصارمة (strict typing) فقط على مستوى التجميع (compile-time)، بينما في وقت التشغيل (runtime) يتم استخدام منطق JavaScript؟
حاولت تفعيل strict: true في ملف tsconfig.json — لكن