typescript:推断类型的一般要求 问题:

typescript:推断类型的一般要求 问题:,typescript,generics,type-inference,Typescript,Generics,Type Inference,如何推断泛型类的泛型需求(扩展部分中的内容) 解释 当给定的W没有扩展T所要求的内容时,E应为空,但扩展时应为A。但是,这根本不起作用,尽管没有显示语法错误警告。我的建议是将E更改为类似以下内容: type E<W> = never extends A<infer T> ? [W] extends [T] ? A<W> : void : never type E=从不扩展?[W] 扩展[T]?A:永远不会 首先,一个条件类型,其中选中的类型是any,比如a

如何推断泛型类的泛型需求(扩展部分中的内容)

解释
当给定的
W
没有扩展
T
所要求的内容时,
E
应为空,但扩展时应为A。但是,这根本不起作用,尽管没有显示语法错误警告。

我的建议是将
E
更改为类似以下内容:

type E<W> = never extends A<infer T> ? [W] extends [T] ? A<W> : void : never
type E=从不扩展?[W] 扩展[T]?A:永远不会
首先,一个条件类型,其中选中的类型是
any
,比如
any扩展X?Y:Z
,对于大多数类型的
X
,最终将被评估为联合
Y | Z
。也就是说,
any
是一种特殊情况,用于接受条件类型的两个分支。有关这方面的一些讨论,请参阅。假设您只是尝试使用条件类型的真正分支,那么最好使用
从不扩展X?Y:Z
。通常,
从不扩展X
将始终为真,然后结果将为
Y
。此外,如果有一种类型你不想把你的工会搞得一团糟,你应该让它
永不
,而不是
无效
。类型
A | never
的计算结果为
A
,而
A | void
通常不会

那么让我们更改
typee=any扩展A?W和T?A:void:void
类型E=从不扩展A?W和T?A:void:never



现在剩下的问题是:当
W
本身是联合类型时,您想做什么?如果您将
E
定义为
W extends T
而不是
[W]extends[T]
,则它将被视为一个。这意味着如果
W
是一种类似
a | B | C
的联合类型,那么
E
将评估该联合中每个成员的条件并联合结果,产生与
E

等效的结果。我的建议是将
E
更改为以下内容:

type E<W> = never extends A<infer T> ? [W] extends [T] ? A<W> : void : never
type E=从不扩展?[W] 扩展[T]?A:永远不会
首先,一个条件类型,其中选中的类型是
any
,比如
any扩展X?Y:Z
,对于大多数类型的
X
,最终将被评估为联合
Y | Z
。也就是说,
any
是一种特殊情况,用于接受条件类型的两个分支。有关这方面的一些讨论,请参阅。假设您只是尝试使用条件类型的真正分支,那么最好使用
从不扩展X?Y:Z
。通常,
从不扩展X
将始终为真,然后结果将为
Y
。此外,如果有一种类型你不想把你的工会搞得一团糟,你应该让它
永不
,而不是
无效
。类型
A | never
的计算结果为
A
,而
A | void
通常不会

那么让我们更改
typee=any扩展A?W和T?A:void:void
类型E=从不扩展A?W和T?A:void:never



现在剩下的问题是:当
W
本身是联合类型时,您想做什么?如果您将
E
定义为
W extends T
而不是
[W]extends[T]
,则它将被视为一个。这意味着,如果
W
是一个类似
a | B | C
的联合类型,那么
E
将评估该联合中每个成员的条件并联合结果,产生与
E

类似的等效结果?让我知道这对你是否有效,如果有效,我会写出来;否则,请说明它如何无法满足您的需求。祝你好运。@jcalz是的,非常感谢!没有元组它也能工作吗?喜欢吗?视情况而定;你想把
E
变成
A
还是
A | A
?像这样?让我知道这对你是否有效,如果有效,我会写出来;否则,请说明它如何无法满足您的需求。祝你好运。@jcalz是的,非常感谢!没有元组它也能工作吗?喜欢吗?视情况而定;您希望
E
成为
A
还是
A | A
type E<W> = never extends A<infer T> ? [W] extends [T] ? A<W> : void : never