32 lines
811 B
JavaScript
32 lines
811 B
JavaScript
|
//@ts-check
|
||
|
|
||
|
/**
|
||
|
* Utility: use it at the end of switch statements to make sure all matches are covered.
|
||
|
* Only useful in an editor that supports JSDOC strong typing.
|
||
|
*
|
||
|
* Use it like so
|
||
|
* ```js
|
||
|
* switch(data):
|
||
|
* case A:
|
||
|
* doThing();
|
||
|
* break;
|
||
|
* case B:
|
||
|
* doOtherThing();
|
||
|
* break;
|
||
|
* default:
|
||
|
* throw new UnreachableCaseError(state);
|
||
|
* ```
|
||
|
* It `data` may be more options, then `state` will be underlined with the error
|
||
|
* ```
|
||
|
* Argument of type 'T' is not assignable to parameter of type 'never'
|
||
|
* ```
|
||
|
* Where `T` is the type of `data`.
|
||
|
* To remove the error, handle all cases.
|
||
|
*/
|
||
|
export class UnreachableCaseError extends Error {
|
||
|
constructor(/** @type {never} */ value) {
|
||
|
super(`Unreachable case: ${JSON.stringify(value)}`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default UnreachableCaseError
|