/** * Helper function for exhaustive checks of discriminated unions. * https://basarat.gitbooks.io/typescript/docs/types/discriminated-unions.html * * @example * * type A = {type: 'a'}; * type B = {type: 'b'}; * type Union = A | B; * * function doSomething(arg: Union) { * if (arg.type === 'a') { * return something; * } * * if (arg.type === 'b') { * return somethingElse; * } * * // TS will error if there are other types in the union * // Will throw an Error when called at runtime. * // Use `assertNever(arg, true)` instead to fail silently. * return assertNever(arg); * } */ export function assertNever(value: never, noThrow?: boolean): never { if (noThrow) { return value } throw new Error( `Unhandled discriminated union member: ${JSON.stringify(value)}`, ); } export default assertNever;