// @strict: true // @declaration: true function f1(a: T & undefined) { return { ...a }; // Error } function f2(a: T | T & undefined) { return { ...a }; } function f3(a: T) { return { ...a }; // Error } function f4(a: object | T) { return { ...a }; } function f5(a: S | T) { return { ...a }; } function f6(a: T) { return { ...a }; } // Repro from #46976 function g1(a: A) { const { z } = a; return { ...z }; } // Repro from #47028 interface DatafulFoo { data: T; } class Foo { data: T | undefined; bar() { if (this.hasData()) { this.data.toLocaleLowerCase(); } } hasData(): this is DatafulFoo { return true; } }