我认为我遇到了TypeScript函数重载决策中的错误。这是一个例子:
class Container<T>
{
constructor(public value: T) { }
}
function unwrap<T>(value: Container<T>): T;
function unwrap<T>(value: T): T;
function unwrap(obj) {
if (obj instanceof Container) {
return obj.value;
} else {
return obj;
}
}
// Inferred type of "a" should be number, but is in fact Container<number>
var a = unwrap(new Container<number>(1));
var b = unwrap(2);
var c = a.toFixed(); // causes compile error
根据我对TypeScript语言规范4.12.1节中的重载决策规则的理解,该语句分配给&#34; a&#34;应该使用第一次解包过载,并分配给&#34; b&#34;应该使用第二次过载。所以两个&#34; a&#34;和&#34; b&#34;应该有推断类型&#34;数字&#34;。但实际上编译器似乎对两个调用使用了第二个unwrap重载,因此推断类型为&#34; a&#34;是Container<number>
,因此分配给&#34; c&#34;无法编译。这是一个错误,还是我误解了重载决策规则?
顺便说一句,我还在使用TypeScript 0.9.0.1,因为我的项目要求兼容性,所以这可能已在新版本中修复了吗?