// @allowUnreachableCode: true let x: string | number | boolean | RegExp; let cond: boolean; x = /a/; if (x /* RegExp */, (x = true)) { x; // boolean x = ""; } else { x; // boolean x = 42; } x; // string | number function a() { let x: string | number; if (cond) { x = 42; } else { x = ""; return; } x; // number } function b() { let x: string | number; if (cond) { x = 42; throw ""; } else { x = ""; } x; // string } function c(data: string | T): T { if (typeof data === 'string') { return JSON.parse(data); } else { return data; } } function d(data: string | T): never { if (typeof data === 'string') { throw new Error('will always happen'); } else { return data; } }