TypeScript泛型报错:Operator '+'无法应用于类型'T'和'T'原因解析
TypeScript泛型函数报错原因解析
先看报错的无约束泛型代码:
function add<T>(a: T, b: T): T { return a + b; }
核心报错原因
- 无约束的泛型
T可以指代任意类型,比如对象、布尔值、自定义类实例这些都能作为T传入。 - 不是所有类型都支持
+运算符:比如传两个对象进去,a + b完全是非法操作。 - TypeScript的类型检查器无法提前确定
T的具体类型,所以会判定a + b这个操作存在类型安全风险,直接抛出错误。
再看正常运行的带约束泛型代码:
function greet<T extends number>(a: T, b: T): number { return (a + b); }
为什么这段能正常运行
T extends number给泛型加了类型约束,限定T只能是number类型或者它的子类型(比如5这种数字字面量)。- TypeScript明确知道
a和b都是数字类型,而数字原生支持+运算,所以类型检查器不会再报错。 - 返回值设为
number也完全合理,两个数字相加的结果必然是数字,和T的约束完全兼容。
内容的提问来源于stack exchange,提问作者Venkatesh Javalagi
相关产品推荐
相关产品推荐

