[英]Should the declaration order affect TypeScript type deduction?
似乎 TypeScript 的翻译器在某种程度上依赖于声明的顺序,至少在重载函数的情况下。
假设我们有 2 维和 3 维向量的类:
class Vector2 {
public get x() : number
public get y() : number
}
class Vector3 {
public get x() : number
public get y() : number
public get z() : number
}
我们有一个重载的 function 接受Vector2
或Vector3
:
function add(a : Vector2, b : number) : Vector2;
function add(a : Vector3, b : number) : Vector3;
根据add()
的哪个签名首先出现 - 使用Vector2
或Vector3
结果 - 编译器可能会推断出不同类型的结果,即使我们将Vector3
作为参数传递也是如此。 例如,在与上述相同的顺序的情况下,以下代码:
const r = add(new Vector3, 5)
将返回Vector2
而不是Vector3
。 因此,如果我们将r
的可能类型限制为Vector3
:
const r : Vector3 = add(new Vector3, 5)
代码不会编译。
应该是这样吗? 因为对我来说,这看起来像是翻译器的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.