Skip to content

Commit a046a64

Browse files
chore: better error message for exhaustive
1 parent e622f75 commit a046a64

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

packages/type-utils/src/exhaustive.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class UnreachableCaseError extends Error {
2+
constructor(val: never, message: string) {
3+
super(`${message}: [${JSON.stringify(val)}]`);
4+
}
5+
}
6+
7+
export const exhaustive = (unhandledCase: never, message = 'Unreachable case'): never => {
8+
throw new UnreachableCaseError(unhandledCase, message);
9+
};

packages/type-utils/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './overloads';
33
export * from './timeout';
44
export * from './utils';
55
export * from './object';
6+
export * from './exhaustive';

packages/type-utils/src/utils.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,3 @@ export type FilterOutFromUnionByTypeProperty<
132132
? never
133133
: { [K in KeyName]: Exclude<ActualValue, ValueToExclude> } & Omit<Union, KeyName>
134134
: Union;
135-
136-
export const exhaustive = (unhandledCase: never): never => {
137-
throw new Error(`Unhandled case ${unhandledCase}`);
138-
};

0 commit comments

Comments
 (0)