feat(dev): add `Distinct` type
Useful for creating types that are stored as other types (usually primitives) but are represented as distinct in the type system. Canonical example exists in documentation.
This commit is contained in:
parent
41e24a1e4f
commit
b55c88fec5
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* A module for utility types that could be used in pretty much every module.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Allows one to create a type that is stored as an underlying type but is distinct from it in the
|
||||
* type system.
|
||||
*
|
||||
* @example
|
||||
* // Creates a distinct `UUID` type from a `string` which can then be expected and only passed
|
||||
* // with either a `UUID` constructor or a value that comes from elsewhere as a constructed `UUID`.
|
||||
* type UUID = Distinct<"UUID", string>;
|
||||
* function UUID(uuid: string): UUID {
|
||||
* return uuid as UUID;
|
||||
* }
|
||||
*/
|
||||
export type Distinct<Tag, Type> = Type & { readonly __distinct_tag: Tag };
|
Loading…
Reference in New Issue