typescript如何测试两个泛型是否相等?

typescript如何测试两个泛型是否相等?,typescript,generics,typescript-typings,Typescript,Generics,Typescript Typings,我希望完成的工作大致如下: type AType<T, U> = (T is Equal U) ? T : [T, U] 但是 我需要的不是: 如果T扩展U 但是: 如果T扩展任何U扩展 我希望这能澄清问题 能做到吗 目前,对于条件类型,您只能问一个问题:扩展。没有相等项,但我们可以通过使用两个检查来模拟它: type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U] 类型AType=T

我希望完成的工作大致如下:

type AType<T, U> = (T is Equal U) ? T : [T, U]
但是

我需要的不是:

  • 如果
    T扩展U
但是:

  • 如果
    T扩展
    任何
    U扩展
我希望这能澄清问题


能做到吗

目前,对于条件类型,您只能问一个问题:
扩展
。没有相等项,但我们可以通过使用两个检查来模拟它:

type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U]
类型AType=T扩展U?你不知道吗?T:[T,U]:[T,U]
首先,我们检查
T
是否扩展
U
。如果是,我们检查
U
是否扩展
T
。只有当
T
U
的类型完全相同时,这两个条件才能同时为真,因此我们返回
T

这在Typescript 3.2中正常工作:

()


另外,了解一般的条件类型也值得一读:

如何定义等价性?相同的结构?或者实际上是同一类型?我希望两个找出这两个泛型类型是否扩展了同一类型-根据这些信息,使用条件返回不同的类型,因此它们应该是同一类型。--例如,假设T是一个
UInt8Array
我想检查的是U是否也是一个
UInt8Array
关于推断中的
2
vs
number
的问题,请参阅。TypeScript通常将泛型中的类型从字符串/数字/布尔文字扩展到
字符串
/
数字
/
布尔
,除非您使用特殊约束(这对您来说
可缩小
就行了)。红色,理解并使用@jcalz;)谢谢你的回答,但这是不正确的-不容易解释,我编辑了我的问题,以便更好地理解你发布的解决方案中的问题。你使用的是哪种类型的脚本版本?在类型脚本操场上,它似乎工作正常,请参阅更新的答案。我确实看到了-我使用的类型脚本是3.2。。。不明白为什么它在我的ide中不工作:/got it working-不确定如何-非常感谢您的回答
const c = fn (2, 3)    // incorrect [number, number]
type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U]