// @strict: true

declare let x: number | string | boolean
declare let n: number;
declare let s: string;
declare let b: boolean;

if (x == n) {
    x;
}

if (x == s) {
    x;
}

if (x == b) {
    x;
}

if (x == 1) {
    x;
}

if (x == "") {
    x;
}

if (x == "foo") {
    x;
}

if (x == true) {
    x;
}

if (x == false) {
    x;
}

declare let xAndObj: number | string | boolean | object

if (xAndObj == {}) {
    xAndObj;
}

if (x == xAndObj) {
    x;
    xAndObj;
}

// Repro from #24991

function test(level: number | string):number {
    if (level == +level) {
        const q2: number = level; // error
        return level;
    }
    return 0;
}
