gpt4 book ai didi

javascript - 为什么类型 'number' 不能分配给类型 'T'?

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:54 24 4
gpt4 key购买 nike

function say3<T>(a: T): T { 
return a + 1;
}
let speak = say3<number>(1)

我尝试了演示,但它说“类型‘数字’不可分配给类型‘T’。”这不是数字吗?

最佳答案

这里的问题在于操作+ 1。 Typescript 无法确定您是在进行数字求和、字符串连接还是 BigInt 操作。事实上,因为 T 类型变量(其中 T 是任何可能的类型)加 1 的结果没有明确定义,甚至可能返回与 T 不同的类型!我想到的一个特殊情况是 []+1=="1"{}+1==1,其中 T是一个 Array 和一个 Object 而该函数将分别返回一个 string 或一个 number

当您对函数进行模板化时,无论可能的 T 类型如何,都需要很好地定义函数。换句话说,是的,T 不是一个数字,即使您稍后明确传递一个数字也是如此。

一个可能的解决方法是明确确定返回类型是一个数字并限制 T:

function say3<T extends number>(a: T): number {
return a + 1;
}
let speak = say3<number>(1)

或者如果你真的想让 T 与其他类型一起工作,你可以进行运算符重载:

function say3(a: string): string 
function say3(a: number): number
function say3(a: any[]): string
function say3(a: object): number
function say3(a: null): number
function say3(a: undefined): number
function say3(a: any) {
return a+1;
}
let speak = say3(1)

无论哪种方式,您都不能对未定义的类型调用运算符。

关于javascript - 为什么类型 'number' 不能分配给类型 'T'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53511050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com