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