Javascript 无法将字符串|编号添加到typescript中的字符串|编号类型

Javascript 无法将字符串|编号添加到typescript中的字符串|编号类型,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,因此,我有一个类型别名T,它表示string | number联合类型 如果我尝试添加两个这种类型的变量,我将得到类型为T的变量。但如果我将这两个变量作为函数的参数,这将是一个错误: 类型T=字符串|编号; 函数add(a:T,b:T):T{ 返回a+b; //错误:运算符“+”不能应用于类型“T”和“T”。 } 设a:T=1; 设b:T='foo'; 常数c=a+b;//但这没关系 为什么我不能这样做?这里的错误案例是number+number | string 您可以验证以下函数是否有效

因此,我有一个类型别名
T
,它表示
string | number
联合类型

如果我尝试添加两个这种类型的变量,我将得到类型为
T
的变量。但如果我将这两个变量作为函数的参数,这将是一个错误:

类型T=字符串|编号;
函数add(a:T,b:T):T{
返回a+b;
//错误:运算符“+”不能应用于类型“T”和“T”。
}
设a:T=1;
设b:T='foo';
常数c=a+b;//但这没关系

为什么我不能这样做?

这里的错误案例是
number
+
number | string

您可以验证以下函数是否有效

function addOne(x: number | string) {
  return 1 + x;
}
从打字稿

如果
T扩展string | number
,则
T
可以是
string | number
,这意味着
T
类型的一个值可以是
string
类型的另一个值
T
可以是
number


听起来您应该在这里使用重载,而不是类型参数。

的精确副本(遗憾的是没有答案)。另请参见(其中名义上的
T
指的是一个泛型,而不是别名,但答案处理相同的情况),但根据该定义,如果两者都是数字,则可以,如果一个数字和一个字符串,则可以。当您尝试添加number和number | string时,只能发生这两种情况。似乎typescript不够聪明,无法解决这个问题