Avatar ·

عامل ! (علامة التعجب) في TypeScript: ماذا يفعل عند الوصول إلى الخاصية؟

مرحباً بالجميع! بدأت مؤخراً في تعلم TypeScript ووجدت بناء جملة غريباً بعلامة التعجب. صادفت هذا الكود: ```typescript let name: string | null = getUserName(); console.log(name!.toUpperCase()); ``` أفهم أن `name` يمكن أن يكون `string` أو `null`. لكن ماذا يفعل هذا `!` بعد `name`؟ بدونه، يشتكي TypeScript: "Object is possibly 'null'". ومعه، كل شيء يعمل. هل هذا عامل؟ هل يغير النوع؟ أم أنها مجرد طريقة لإخبار المترجم "اخرس"؟ متى يكون من المناسب استخدامه، ومتى يكون خطيراً؟ قرأت عن optional chaining (`?.`)، لكن هنا بناء جملة مختلف تماماً. هل يمكنكم شرح بسيط لما يفعله `!` (علامة التعجب / bang) عند الوصول إلى عضو كائن؟ وكيف يختلف عن تأكيد النوع العادي باستخدام `as`؟ شكراً! <<>>

ما هو عامل ! (non-null assertion) في TypeScript؟

هذا عامل تأكيد القيمة غير الفارغة (non-null assertion operator). يخبر المترجم بأن القيمة ليست `null` أو `undefined`، حتى لو كان النوع يقول عكس ذلك.