2016-02-26 2 views
0

В фрагменте ниже машинопись компилятор v1.7 идентифицирует й, как в соответствии с п С1 третьего typeguardобъединения изменение типа логического вывода между v1.7 и v1.8

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 думает о й, как С2 в соответствии с третьей typeguard поэтому что приводит к сбою компиляции. Это намечено или ошибка?

ответ

1

Это ошибка в компиляторе как в версиях v1.7 и v1.8, хотя конечный результат в них различен. Охранник типа (x instanceof C3) должен сделать его C3 в этом блоке период. Я зарегистрирую ошибку.

Сообщение об ошибке: https://github.com/Microsoft/TypeScript/issues/7271