تحليل تدفق التحكم
تحليل تدفق التحكم في TypeScript هو طريقة لتحليل تدفق الشيفرة تحليلاً ساكنًا لاستدلال أنواع المتغيرات، ما يسمح للمصرّف بتضييق أنواع تلك المتغيرات حسب الحاجة استنادًا إلى نتائج التحليل.
قبل TypeScript 4.4، كان تحليل تدفق الشيفرة يُطبَّق فقط على الشيفرة داخل عبارة if، ولكن بدءًا من TypeScript 4.4، يمكن تطبيقه أيضًا على التعبيرات الشرطية والوصول إلى الخصائص المميِّزة المشار إليها بصورة غير مباشرة من خلال متغيرات const.
على سبيل المثال:
const f1 = (x: unknown) => { const isString = typeof x === 'string'; if (isString) { x.length; }};
const f2 = ( obj: { kind: 'foo'; foo: string } | { kind: 'bar'; bar: number }) => { const isFoo = obj.kind === 'foo'; if (isFoo) { obj.foo; } else { obj.bar; }};بعض الأمثلة التي لا يحدث فيها التضييق:
const f1 = (x: unknown) => { let isString = typeof x === 'string'; if (isString) { x.length; // خطأ، لا يحدث تضييق لأن isString ليس const }};
const f6 = ( obj: { kind: 'foo'; foo: string } | { kind: 'bar'; bar: number }) => { const isFoo = obj.kind === 'foo'; obj = obj; if (isFoo) { obj.foo; // خطأ، لا يحدث تضييق لأن obj يُسنَد في جسم الدالة }};ملاحظات: يُحلَّل ما يصل إلى خمسة مستويات من الإحالة غير المباشرة في التعبيرات الشرطية.