来个 ts 大佬看下这个基础的问题?

function add<T>(num:T):T{
    return num + 2  // Operator '+' cannot be applied to types 'T' and 'number'.(2365)
}

const res = add<number>(5)
console.log('res',res)

注释处划了红线~ 请教下怎么修改

阅读 4.1k
5 个回答

没有对T进行约束,T可以是任何类型,可以是number,string,也可以是boolean,如果是number的话确实没问题,但是如果是boolan的话,在ts中就无法相加,因为ts是强类型语言,所以会报错,
简而言之 ,你这样其实是给num和函数的返回给了一个任意类型,但是return的时候你你又给这个任意类型加了一个number类型,ts无法确定到最终的类型,所以会提示报错。

function add<T extends number> (num: T) {
  return num + 2
}

既然你都已经定义了“无论是什么类型”,那直接把 num 声明为 any 类型不就好了,并不需要作类型约束。

function add<T extends number>(num:T):number{
    return num + 2
}
function add(num: number): number
function add(num: string): string
function add(num: any): any {
  return num + 2
}

const res = add(1)
const res1 = add('1')
console.log('res', res, res1)

function add (num: boolean): number;
function add (num: number): number;
function add (num: unknown): string;
function add (num?: undefined): number;
function add (num?: any): number | string {
  return num + 2;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题