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
类型具有泛型。 Type
是A|B
,与"a" | "b" | "c" | "d"
相同。并且A
等于"a" | "b"
。但是为什么我不能使用Type extends A ? C<Type> : D<Type>
? D<Type>
引发错误“类型'类型'不满足约束'B'。”。
答案 0 :(得分:2)
这是一个未解决的问题;参见microsoft/TypeScript#23132。如果您认为该问题很有说服力,则可以给该问题加?或描述您的用例。不知道是否会更改。不过,到目前为止,条件类型或多或少会忽略任何通用约束,并且解决方法是使用其他可能是多余的检查:
type Auto<T extends (A | B)> = T extends A ? C<T> : T extends B ? D<T> : never
那应该表现出您想要的方式。好吧,希望能有所帮助;祝你好运!