ts-essentials
Version:
All essential TypeScript types in one place
8 lines (7 loc) • 363 B
TypeScript
type StringLiteral<Type> = Type extends string ? (string extends Type ? never : Type) : never;
declare const __OPAQUE_TYPE__: unique symbol;
export type WithOpaque<Token extends string> = {
readonly [__OPAQUE_TYPE__]: Token;
};
export type Opaque<Type, Token extends string> = Token extends StringLiteral<Token> ? Type & WithOpaque<Token> : never;
export {};