TypeScript - كيف يمكنني منع النوع العام من استخدام "any" كحجة لنوعه؟


كيف يمكنني منع نوع عام من استخدام any كحجة نوع له؟ إذا كان حجتي العامة مقيدة باستخدام الكلمة المفتاحية extends، يبدو غريبًا أنه يمكن استبداله بـ any.

على حد فهمي، كل شيء يمتد من any، لكن any لا يجب أن يمتد من أي شيء (باستثناء any نفسه).

إليك مثال:

type OneOrTwo = 1 | 2;
type MyType<T extends OneOrTwo> = T;
const t1: MyType<OneOrTwo> = 1; // OK
const t2: MyType<any> = 2;      // OK
const t3: MyType<OneOrTwo> = 3; // Error: Type '3' is not assignable to type 'OneOrTwo';
const t4: MyType<any> = 4;      // OK?? How can I prevent this?

هل يمكنني جعل تايب سكريبت يمنعني من كتابة t4 هكذا؟ إما عن طريق تغيير الكود أو باستخدام خيار في tsconfig ربما؟

الإجابة رقم 1

في وقت الكتابة لا يمكنك ذلك. كتابة any في أي مكان في الكود يعني أن TypeScript لن تقوم بأي فحوصات على الإطلاق، وهذا ينتشر. يمكنك منع النوع الضمني any في بعض الحالات، عن طريق ضبط مجموعة من الخيارات التالية:

  • صارم
  • لا_ضمني_أي
  • التحقق الصارم من القيم الفارغة
  • عدم وجود فحوصات عامة صارمة
  • أنواع الدوال الصارمة
  • الاتصال_الصلب_بالربط_والتطبيق

داخل tsconfig.json