تایپاسکریپت - چرا تحلیل جریان کنترل به if else اعمال میشود و به عملگر سهتایی نه؟


هنگام نوشتن این کد:

const a = 1;
const b = 'string';

let test;

if(true) {
  test = a
} else {
  test = b; // Unreachable code detected
}

test; // number

محل بازی تایپاسکریپت

تایپاسکریپت به درستی کد غیرقابل دسترسی را تشخیص میدهد و نوع test را به number به درستی استنتاج میکند.

با این حال، این برای عملگر سهتایی صدق نمیکند:

const a = 1;
const b = 'string';

const test = true ? a : b; // 1 | "string"

محل بازی تایپاسکریپت

در این حالت TypeScript هیچ خطایی نمیدهد و تشخیص نمیدهد که test میتواند فقط از نوع 1 باشد. چرا اینطور نیست؟