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}`);