typescript 函数泛型问题

function getRandomNumber<T>(start: T, end: T, k: T): [] {
  let res:any[] = []
  for (let i = start; i < end; i++) {
    res.push({value:i,random:Math.random()})
  }
  res = res.slice(res.length-k)
  console.log(res)
  return []
}
getRandomNumber<number>(1,10,5)

代码如上 我在 vscode 编辑器提示我红色波浪线
image.png

算术运算右侧必须是 "any"、"number"、"bigint" 或枚举类型。ts(2363)

我的理解是泛型 T 应该是 number 啊 start,k 不就是个 number 吗?为什么还会提示错误?

阅读 5.3k
2 个回答

你调用的时候确实是传入number, 但是声明函数的时候他不知道你要传入什么类型呀, 所以就报错了, 限定下T的类型就好了.. ts我也是半斤八两 纯属个人看法

function getRandomNumber<T extends number>(start: T, end: T, k: T): [] {
  let res:any[] = []
  for (let i = start; i < end; i++) {
    res.push({value:i,random:Math.random()})
  }
  res = res.slice(res.length-k)
  console.log(res)
  return []
}

对泛型定义没有理解。在函数定义的时候类型T未知,编译器无法理解未知类型做++运算是否合法,所以抛出错误

function getRandomNumber<T extends number | bigint>(start: T, end: T, k: T): [] {
  let res:any[] = []
  for (let i = start; i < end; i++) {
    res.push({value:i,random:Math.random()})
  }
  res = res.slice(res.length-k)
  console.log(res)
  return []
}
getRandomNumber<number>(1,10,5)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题