function *a(x: {a: void | string}): Generator { if (!x.a) return; (x.a: string); // ok yield; (x.a: string); // error } function *b(x: void | string): Generator { if (!x) return; (x: string); // ok yield; (x: string); // ok } declare function fn(): Generator; function *c(x: {a: void | string}): Generator { const gen = fn(); if (!x.a) return; (x.a: string); // ok yield * gen; (x.a: string); // error } function *d(x: void | string): Generator { const gen = fn(); if (!x) return; (x: string); // ok yield * gen; (x: string); // ok }