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