TypeScript函数重载错误

时间:2014-09-04 19:14:38

标签: typescript overloading

我认为我遇到了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,因为我的项目要求兼容性,所以这可能已在新版本中修复了吗?

1 个答案:

答案 0 :(得分:0)

这已得到修复。您可以在TypeScript Playground

中试用