联合类型推断在v1.7和v1.8之间变化

时间:2016-02-26 23:26:31

标签: typescript1.8

在下面的代码段中,TypeScript编译器v1.7在第三个typeguard子句

下将x标识为C1
class C1 { item: string }
class C2 { item: string[] }
class C3 { item: string }

function Foo(x: C1 | C2 | C3): string {
    if (x instanceof C1)
        return x.item;
    else if (x instanceof C2)
        return x.item[0];
    else if (x instanceof C3)
        //in v1.7 compiler thinks x is C1 
        //in v1.8 compiler thinks x is C2 
        return x.item;
} 

V1.8认为x为第三类型防御下的C2,因此编译失败。 是故意还是错误?

1 个答案:

答案 0 :(得分:1)

这是v1.7和v1.8 中编译器中的错误,即使最终结果不同。 (x instanceof C3)类型后卫应该在该块期间中设为C3。我会记录一个错误。

错误报告:https://github.com/Microsoft/TypeScript/issues/7271