可以在Typescript中将一个参数设置为与另一个参数“相同的类型”吗?

时间:2019-11-25 21:22:37

标签: typescript

是否可以将一个函数的两个参数设为完全相同的动态声明类型?

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)-通过,但应该失败

2 个答案:

答案 0 :(得分:1)

您可以使用泛型来完成此操作:

function compare<T = string | number>(a: T, b: T): number {
  // ...
}

Playground link

答案 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

Playground Link