Потому что условные типы не работают таким образом, я полагаю?Это интересное предложение иметь ошибку «недостижимый код» для части string
этого условного типа, но я не могу представить, чтобы кто-то сильно заботился о его реализации.
Технически и педантично, я мог бы указатьиз-за того, что T
может быть пересечением 'fo' & 'whyNoError?'
, которое, хотя и является абсурдным типом, который в конечном итоге сводится к never
, ведет компилятор по пути, который может показаться удивительным:
interface Foo<T extends 'fo' | 'foo'> {
bla: T extends 'whyNoError?' ? string : number;
}
declare const foo: Foo<'fo' & 'whyNoError?'>;
const str = foo.bla; // string !!
Это не очень удовлетворительный ответ, потому что, вероятно, никто не хочет поддерживать такие глупые пересечения, но вы должны понять, что нетрудно реализовать то, о чем вы спрашиваете, не беспокоясь о таких крайних случаях.
Надеюсь, это поможет;удачи!