**Version 1.8** > First of all I'm sorry if I get the jargon wrong, I'm new to typescript (I tried to search for this issue and failed, I may have used the wrong search terms). When using type guards, code in an `else` block uses the condition in the `if` to infer the type of the variable. However if the `if` contains an early `return` the rest of the function should be treated as the `else` of the `if` from we we returned. **Code** ``` ts // A self-contained demonstration of the problem follows... type Foo = { a: string }; function isFoo(x): x is Foo { return x && typeof(x.a) === 'string'; } type Bar = { b: string }; function buz1(arg: Foo|Bar) : string { if (isFoo(arg)) return arg.a; // OK arg inferred to be Foo else return arg.b; // OK arg inferred to be Bar } function buz2(arg: Foo|Bar) : string { if (isFoo(arg)) return arg.a; // OK arg inferred to be Foo return arg.b; // ** Error b isn't a member of Foo|Bar ** } ``` **Expected behavior:** function `buz2` should compile with no error. **Actual behavior:** Error when accessing member `b` of `arg` even though `arg` can be inferred to be of type `Bar` (as it is in `buz1.else`).