<分区>
我希望完成的是:
type AType<T, U> = (T is Equal U) ? T : [T, U]
[编辑] 基于评论让我用一个实际的例子来改写:
让我们假设 T 是一个 UInt8Array
如果 U 也是一个 UInt8Array
则相等。
等价由相同的类型定义。
[编辑 2]
基于@daniel-hilgarth 的回答
它不起作用,因为 T extends U
在实际使用中(见下文)如果我们假设 T 和 U 是数字,T 将被转换为传递的数字的实例,因为 T 不会是一个 number
但 T 将是一个扩展 number
类型的 2
。所以如果 U 是 3
它不会扩展 2
抱歉,如果不清楚,请检查下面的实现
type AType<T, U> = T extends U ? U extends T ? T : [T, U] : [T, U]
const fn = <T extends string | number, U extends string | number>(
x: T,
y: U,
): AType<T, U> => {
throw new Error ('Yet to implement !')
}
const a = fn (2, 2) // correct number
const b = fn (2, 's') // correct [number, string]
但是
const c = fn (2, 3) // incorrect [number, number]
我需要的不是:
- 如果
T 扩展了 U
但是:
- 如果
T extends
无论U extends
我希望它能澄清问题。
可以吗?