Typescript类型推断不适用于条件类型

时间:2020-03-03 01:54:47

标签: typescript generics conditional-types

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类型具有泛型。 TypeA|B,与"a" | "b" | "c" | "d"相同。并且A等于"a" | "b"。但是为什么我不能使用Type extends A ? C<Type> : D<Type>D<Type>引发错误“类型'类型'不满足约束'B'。”。

1 个答案:

答案 0 :(得分:2)

这是一个未解决的问题;参见microsoft/TypeScript#23132。如果您认为该问题很有说服力,则可以给该问题加?或描述您的用例。不知道是否会更改。不过,到目前为止,条件类型或多或少会忽略任何通用约束,并且解决方法是使用其他可能是多余的检查:

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

那应该表现出您想要的方式。好吧,希望能有所帮助;祝你好运!

Playground link to code