是否可以将一个函数的两个参数设为完全相同的动态声明类型?
function compare(a: string | number, b: typeof a): number {
// ...
}
这当前会将a
的类型克隆到b
上,因此它实际上也为b
赋予了string | number
的并集类型,换句话说,它与(a: string | number, b: string | number)
。但是我正在寻找一种执行严格匹配的方法,如果a
是一个数字,b
也必须是一个数字,反之亦然。例子:
compare(1, 2)
-按预期通过compare('a', 'b')
-按预期通过compare(1, 'b')
-通过,但应该失败compare('a', 2)
-通过,但应该失败答案 0 :(得分:1)
您可以使用泛型来完成此操作:
function compare<T = string | number>(a: T, b: T): number {
// ...
}
答案 1 :(得分:1)
您只需要一个类型参数:
function compare<T extends string | number>(a: T, b: T): number {
return 0;
}
compare(1, 2)
compare('a', 'b')
compare(1, 'b') // err
compare('a', 2) // err