在学习TypeScript中的泛型时,我想尝试重新创建以下JavaScript:
function add(x, y){
return x + y;
}
我尝试过:
type StringOrNumber = string | number;
function add<MyType extends StringOrNumber>(x: MyType, y: MyType): MyType {
return x + y;
}
此错误:
error TS2365: Operator '+' cannot be applied to types 'MyType' and 'MyType'.
为什么这行不通?我假设MyType
可以是字符串,也可以是数字,一旦“选择”了TypeScript,便知道它是在两个字符串或两个数字上加一个。
答案 0 :(得分:2)
也可能发生的情况是MyType
可以是string | number
extends
的{{1}}。例如,StringOrNumber
是对具有您定义的签名的函数的完全有效的调用。扩展并集类型的类型并不意味着“精确选择一个”。
由于您的签名很有意义,并且您正在学习泛型,因此我们希望继续使用它,因此我们也可以在此时关闭类型检查。有时候,打字稿确实无法弄清您的复杂情况,此时您只能选择add<string | number>('', 1);
放弃类型检查。
处理这种情况的另一种方法是使用如下所示的重载签名
return (x as any) + y