繁体   English   中英

TypeScript函数重载错误

[英]TypeScript Function Overloading Bug

我认为我在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节中的重载解决规则的理解,分配给“ a”的语句应使用第一个拆包重载,而分配给“ b”的语句应使用第二个重载。 因此,“ a”和“ b”都应具有推断的“数字”类型。 但是实际上,编译器似乎在两个调用中都使用了第二个unwrap重载,因此推断的“ a”类型为Container<number> ,因此对“ c”的赋值无法编译。 这是一个错误,还是我误解了重载解决规则?

顺便说一句,我仍然使用TypeScript 0.9.0.1,因为我的项目需要兼容性,所以也许它已经在较新的版本中解决了?

此问题已解决。 您可以在TypeScript游乐场中尝试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM