例如我在.tsx file
扩展中有此代码
const Add = <T,>(arg0: T, arg1: T): T => arg0 + arg1;
const A = Add(1, 2);
const B = Add('1', '2')
我的问题是有一个错误说:
Operator '+' cannot be applied to types 'T' and 'T'.ts(2365)
是否有解决方法,如何在带有泛型的Arrow函数中使用它?
好吧,首先,您想将泛型约束到您实际打算与+
运算符一起使用的事物。大概是string
或number
。然后,这仍然会失败,因为编译器会讨厌add string | number
。更糟的是,限制一个泛型参数,延长string | number
将导致编译器来解释输入的任何一个字符串文字或数字字符类型,你不想要的返回类型Add(1, 2)
为1 | 2
。
最简单的解决方法是使用一个类型断言和条件类型的回报,这拓宽了结果要么string
,number
或string | number
:
const Add = <T extends string | number>(
arg0: T, arg1: T
): T extends string ? string : number => arg0 as any + arg1;
const A = Add(1, 2); // number
const B = Add('1', '2') // string
Add(1, "2"); // compile error
Add("1", 2); // compile error
const C = Add(Math.random() < 0.5 ? 1 : "1", Math.random() < 0.5 ? 2 : "2"); // string | number
好吧,希望能有所帮助;祝好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句