我对TypeScript非常陌生。我的TypeScript版本是3.7.5。
恕我直言,它应该非常容易,但是我不知道为什么它不起作用。
function add<T> (a:T, b:T):T {
return a + b ;
}
console.log(add (5,6));
我收到错误:
运算符'+'不能应用于类型'T'和'T'。
我也使用过这个:
function add<T extends string | number > (a:T, b:T):T
存在相同的错误。如果我不能为这个泛型使用+,为什么我应该使用泛型
看来有必要像这样设置约束:
add<T extends number> (a:T, b:T):number {
return a + b ;
}
或T
的string
:
add<T extends string> (a:T, b:T):string {
return a + b ;
}
此版本不适用,因为您无法预测是级联还是添加。
add<T extends string | number > (a:T, b:T):T {
}
在这里泛型不是正确的方法。您不能将+
运算符应用于不受约束的T
(为什么要这样做?)。function add<T extends string | number > (a:T, b:T):T
也不起作用,因为TS要求至少一个操作数为string
,在这里不是这种情况。例如。那这个星座呢:
const sn1 = 3 as number | string
const sn2 = "dslf" as number | string
add(sn1,sn2) // both types have type number | string, sh*t...
+
运算符不能在JS中重载,但我们仍然可以重载函数:
function add(a: string, b: string): string
function add(a: number, b: number): number
function add(a: any, b: any) {
return a + b;
}
add(1, 2) // number
add("foo", "bar") //string
这是工会的补充
function add<T extends string | number>(a: T, b: T): T extends string ? string : number {
return <any>a + <any>b; // cast to any as unions cannot be added, still have proper typings applied
}
const res1 = add(5, 6) // number
const res2 = add('a', 'b') // string