//// [assertionsAndNonReturningFunctions.js]
/** @typedef {(check: boolean) => asserts check} AssertFunc */ /** @type {AssertFunc} */ var assert = function assert(check) {
    if (!check) throw new Error();
};
/** @type {(x: unknown) => asserts x is string } */ function assertIsString(x) {
    if (!(typeof x === "string")) throw new Error();
}
/**
 * @param {boolean} check
 * @returns {asserts check}
*/ function assert2(check) {
    if (!check) throw new Error();
}
/**
 * @returns {never}
 */ function fail() {
    throw new Error();
}
/**
 * @param {*} x 
 */ function f1(x) {
    if (!!true) {
        assert(typeof x === "string");
        x.length;
    }
    if (!!true) {
        assert2(typeof x === "string");
        x.length;
    }
    if (!!true) {
        assertIsString(x);
        x.length;
    }
    if (!!true) {
        fail();
        x; // Unreachable
    }
}
/**
 * @param {boolean} b 
 */ function f2(b) {
    switch(b){
        case true:
            return 1;
        case false:
            return 0;
    }
    b; // Unreachable
}
