我知道这个问题已经在 StackOverflow 和 GitHub 上被问过。在这个问题上,我想延长他们的谈话。正如 Typescript 核心团队成员 RyanCavanaugh 所说:
到目前为止描述的所有内容都是预期的行为。不从不同的候选人推断工会类型是 100% 有意的;尽管理论上是合理的,但在绝大多数情况下这不会产生预期的结果。
但是使用一个技巧,我设法使类型 a 和 b 相同。但打字稿仍然无法弄清楚 a 和 b 是相同的。
type Addable = string | number
type BeSame<T>= T extends number ? number : string
function addMe<T extends Addable,U extends BeSame<T>>(a: T,b: U) {
return a+b;
}
-Operator '+' cannot be applied to types 'T' and 'U'
预期行为:
因为我告诉 typescript a 和 b 类型是相同的,所以应该允许我在 a 和 b 上使用
+
运算符。
addMe("helo", 2); // error cuz a and b are not same
addMe(4,5); // fine a and b are same
addMe("hello", "hello"); // also fine
如果您尝试执行“a = b”,您将看到以下错误消息:
“U”类型不可分配给“T”类型。 'U' 可分配给类型 'T' 的约束,但 'T' 可以使用约束 'Addable' 的不同子类型来实例化