TypeScript Version: 1.8.10
Code
interfaceFoo{x: number;s: string;}interfaceBar{y: number;z: number;}interfaceHasNum{a: number;}typeFooOrBar=Foo|Bar;typeFooOrBarWithNum=FooOrBar&HasNum;functionis_foo(f: FooOrBar): f is Foo{return(fasFoo).x!==undefined;}letobj: FooOrBarWithNum={a: 5,x: 5,s: "hello"};if(is_foo(obj)){obj.x;// ERROR: Property 'x' does not exist on type (Foo | Bar) & HasNum}letobj_2: FooOrBar=obj;// Cast it back to just a FooOrBar.if(is_foo(obj_2)){obj_2.x;// This compiles just fine.}Expected behavior:
I would expect obj to have type Foo inside of the if-block.
Actual behavior:
obj is not refined, but obj_2 is.
TypeScript Version: 1.8.10
Code
Expected behavior:
I would expect
objto have typeFooinside of the if-block.Actual behavior:
objis not refined, butobj_2is.