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 编辑器提示我红色波浪线

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

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

回答

你调用的时候确实是传入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)

以上是 typescript 函数泛型问题 的全部内容, 来源链接: utcz.com/a/32388.html

回到顶部