ts-gems
Version:
Valuable typing extensions for TypeScript
13 lines (12 loc) • 310 B
text/typescript
/**
* Opaque
* @desc Create unique type that can't be assigned to base type by accident.
*/
declare namespace Symbols {
export const base: unique symbol;
export const brand: unique symbol;
}
export type Opaque<T, N extends string> = T & {
readonly [Symbols.base]: N;
readonly [Symbols.brand]: N;
};