перегрузки с помощью Conditional types:
function getID<T extends boolean>(fancy: T): T extends true ? string : number {
return fancy ? 'string' : 123;
}
Type 'string | number' is not assignable to type 'T extends true ? string : number'.
Type 'string' is not assignable to type 'T extends true ? string : number'.
https://www.typescriptlang.org/play?ssl=1&ssc=1&pln=10&pc=1#code/GYVwdgxgLglg9mABAcwKZQJIBEA8AVRVADylTABMBnRAIzjgBtUBDMAPgAphWIBPALkR4AlIILFSFalABOIVIgD8iSrJhhkiQWBABbGqhmIA3gFgAUIiuIZ6EDKTdIvJYgDkqmeuRutiAIwATADMANwWAL4WFqCQsAgo6BjkXDwCiLLyoipqGuHmsdDwSGiYKU58gtwMlKjZOvqG+YXxJUnlaYJ0jCxg2Z7eiAA+iA0GRmaWNnYOiBUuyh65Pn5BYZEWQA
Скорее всего возвращаемое значение надо сделать так string | number
Потому что T extends true ? string : number может быть только string или только number. А тип выражения именно 'string' | 123. То, что хочется — это чтобы control flow analysis с зависимыми типами (насколько они есть в TS) работал.
Обсуждают сегодня