diff --git a/ts/missingCaseError.ts b/ts/missingCaseError.ts new file mode 100644 index 000000000..c32999bac --- /dev/null +++ b/ts/missingCaseError.ts @@ -0,0 +1,21 @@ +// `missingCaseError` is useful for compile-time checking that all `case`s in +// a `switch` statement have been handled, e.g. +// +// type AttachmentType = 'media' | 'documents'; +// +// const type: AttachmentType = selectedTab; +// switch (type) { +// case 'media': +// return ; +// case 'documents': +// return ; +// default: +// return missingCaseError(type); +// } +// +// If we extended `AttachmentType` to `'media' | 'documents' | 'links'` the code +// above would trigger a compiler error stating that `'links'` has not been +// handled by our `switch` / `case` statement which is useful for code +// maintenance and system evolution. +export const missingCaseError = (x: never): TypeError => + new TypeError(`Unhandled case: ${x}`);