【发布时间】:2020-04-11 16:32:05
【问题描述】:
我有一个带有一个泛型参数的函数,但有两个函数参数。 当我使用“字符串文字类型”时,两个函数参数可以有不同的值:
function func2<T extends 'A' | 'B'>(x: T, y: T): void { }
func2('A', 'A'); // OK
func2('A', 'B'); // OK, why?
func2('A', 'C'); // ERR
但我需要 x 和 y 相同,例如 Classes 示例:
class A { public a;}
class B { public b;}
class C { public c;}
function func1<T extends A | B>(x: T, y: T): void { }
func1(new A(), new A()); // OK
func1(new A(), new B()); // ERR
func1(new A(), new C()); // ERR
x 和y 有没有与“字符串文字类型”相同的值?
【问题讨论】:
-
参数都与约束匹配,并且顺序无关紧要,因此会进行适当的推断,但是您可以写
func2<T extends 'A' | 'B', U extends T>(x: T, y: U)。这使得第二个约束取决于第一个 -
感谢 Aluan Haddad 解决了我的问题。我是 Stackoverflow 的新手,如何将您的答案标记为解决方案?
-
哦,这不是答案,而是评论。我稍后会添加答案
标签: typescript generics