TypeScript / دليل حلول تحريري
استبدال الثقة بالتأكيد بتحقق تنفيذي
عامل الخارج unknown وافحص البنية والمجال وأعد بيانات منتقاة بدل ادعاء أن التحويل أصلح الإدخال.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
تترجم الشيفرة بعد تأكيد ثم يفشل أسلوب أو ينتج NaN أو تتسلسل حقول غير متوقعة. يتكرر تحليل JSON ثم تأكيد واجهة أو T. يعكس النجاح ادعاء الكاتب لا مطابقة البايتات.
قد تخفيه اختبارات المقبول وحده. يصمت الفاحص مع any أو تأكيد الغياب وتبقى الكائنات المشوهة والمفقود كما هي فعليًا.
افهم الأسباب المحتملة
- تُمحى التأكيدات دون تحويل عام أو فحص مخطط، وكذلك الواجهات والمعاملات. تختلف صحة JSON من البنية، ويختلف number من الصحيح المحدود. وقد يكذب الحارس إذا لم يفحص الحقول المطلوبة.
- قد يصح الشكل ويغيب الإذن أو يتضخم الحجم أو يتغير عبر اسم آخر. افصل الفحص والتطبيع والصلاحية والملكية. عالج الصياغة والمجال صراحة بدل استثناء عرضي من أسلوب لاحق.
تحديد الوعد الذي يصنعه التأكيد
يؤكد المقتطف count عددًا رغم نص JSON وقد يقبله الفاحص لادعاء الكاتب. لا يفحص التأكيد الخاصية أو يحولها. هو غير قابل للتشغيل ولا ناتج ناجحًا مضمونًا. لا تستبدله بـany أو تحويل آخر؛ اكتب البنية والمجال قبل الإصلاح.
export {};
const data = JSON.parse('{"count":"3"}') as { count: number };
console.log(data.count.toFixed(0));
تأكيد مضلل عمدًا؛ لا يثبت قبول الفاحص صلاحية التنفيذ.
تحليل قيمة unknown الفعلية
يبدأ التصحيح بـunknown ويرفض null وغير الكائن ويفحص الحقل والصحيح المحدود. يعيد منتقى جديدًا دون حقول أخرى. يفترض JSON عادية؛ فللكائنات الخاصة سياسة وصول إضافية. لا يلزم التأكيد لأن الفحص يضيّق. والتقط خطأ صياغة JSON قبل إرسال القيمة للمحلل.
export {};
type CountData = { count: number };
function decode(value: unknown): CountData | undefined {
if (typeof value !== "object" || value === null || !("count" in value)) { return undefined; }
const count = value.count;
if (typeof count !== "number" || !Number.isSafeInteger(count) || count < 0 || count > 100) { return undefined; }
return { count };
}
const valid: unknown = JSON.parse('{"count":3}');
const invalid: unknown = JSON.parse('{"count":"3"}');
console.log(JSON.stringify(decode(valid)));
console.log(decode(invalid) === undefined);
{"count":3}
true
يُقبل العدد ثلاثة ويُرفض نصه دون تحويل أو تأكيد.
حفظ الصلاحية بعد التحليل الناجح
اختر تجاهل الزائد أو انتقاءه أو رفضه وحدّد التطبيع منفصلًا إذا قبلت النص الرقمي. حدّ المصفوفات والعمق واحمِ الصحيح من التعديل المفاجئ. افحص صلاحيات المدخل العام بعد هوية موثوقة. لا يؤدي نوع متقدم هذه الأعمال؛ واستخدم أخطاء منظمة إذا لزمت فئات الحقول.
تحقق من نجاح الإصلاح
ترجم المصحح وشغّله بخيارات المقرر ليطبع {"count":3} وtrue بسطرين. لا تشغل المضلل؛ يوضح قبوله ترجمة فقط نقص الإشارة الساكنة.
اختبر null والأوليات والمفقود والنص والكسر واللانهاية والسالب والصفر والحدين، وافحص مفاتيح الناتج مع الحقول الخاصة. اختبر الصياغة المشوهة منفصلة لأن المحلل يستقبل قيمة محللة.
امنع تكرار المشكلة
- سمّ الخارج unknown واشترط تحققًا تنفيذيًا وراجع التأكيد كادعاء ثقة. احفظ السلبية وميّز الفحص والصلاحيات وترشيح الناتج.