Skip to content

Commit

Permalink
Branded type utils (2263)
Browse files Browse the repository at this point in the history
  • Loading branch information
bmingles committed Oct 22, 2024
1 parent 74a5cb7 commit fe0b1bb
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions packages/utils/src/TypeUtils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
/*
* Branded type helpers. Allows creating "branded" types that satisfy a base type
* but are distinct from other types that satisfy the same base type.
*
* e.g. These 2 types are still strings, but they are unique from each other:
* declare const UserID: Brand<string, 'userId'>;
* declare const RoleID: Brand<string, 'roleID'>;
*
* This protects against accidentally assigning one type to another.
* const roleId: RoleID = '123';
* const userId: UserID = roleId; // Compiler error
*/
// eslint-disable-next-line no-underscore-dangle
declare const __brand: unique symbol;
export type Brand<T extends string, TBase = string> = TBase & {
readonly [__brand]: T;
};

/**
* Util type to create a "subtype" of T. Useful for creating subsets of union
* types.
Expand Down

0 comments on commit fe0b1bb

Please sign in to comment.