Вывод типа Typescript не работает в условном типе - PullRequest
0 голосов
/ 03 марта 2020
Тип
type A = "a" | "b";
type B = "c" | "d";
type C<Type extends A> = Type;
type D<Type extends B> = Type;
type Auto<Type extends (A|B)> = Type extends A ? C<Type> : D<Type>; //It throws error!
//Type 'Type' does not satisfy the constraint 'B'.

Auto имеет тип c. Type равно A|B, так же, как "a" | "b" | "c" | "d". И A равно "a" | "b". Но почему я не могу использовать Type extends A ? C<Type> : D<Type>? D<Type> выдает ошибку «Тип« Тип »не удовлетворяет ограничению« В ».»

1 Ответ

2 голосов
/ 03 марта 2020

Это открытый вопрос; см. microsoft / TypeScript # 23132 . Вы можете решить эту проблему ? или описать свой вариант использования, если считаете, что он неотразим. Не уверен, что это когда-нибудь будет изменено. На данный момент, однако, условные типы более или менее игнорируют любое обобщенное ограничение c, и обходной путь должен использовать дополнительные и, возможно, избыточные проверки:

type Auto<T extends (A | B)> = T extends A ? C<T> : T extends B ? D<T> : never

Это должно вести себя так, как вы этого хотите. Хорошо, надеюсь, это поможет; удачи!

Детская площадка ссылка на код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...