@xylabs/enum

Base functionality used throughout XY Labs TypeScript/JavaScript libraries
Install
Using npm:
npm install {{name}}
Using yarn:
yarn add {{name}}
Using pnpm:
pnpm add {{name}}
Using bun:
bun add {{name}}
License
See the LICENSE file for license rights and limitations (LGPL-3.0-only).
Reference
packages
enum
### .temp-typedoc
### functions
### <a id="Enum"></a>Enum
@xylabs/enum
function Enum<T>(obj): Enum<T>;
Transforms a given record object into a readonly "enum-like" structure while preserving
the literal types of its values. This allows you to use the returned object both at runtime
(for lookups) and at compile time (for strongly typed values).
To maintain literal types (i.e., prevent them from being widened to string, number, etc.),
ensure you annotate your object with as const before passing it to Enum.
Type Parameters
T
T extends Record<string | number | symbol, unknown>
A record type with string keys and any kind of values.
Parameters
obj
Readonly<T>
A readonly record object annotated with as const.
Returns
Enum<T>
A readonly version of the provided record, preserving exact literal value types.
Example
const DnsRecordType = Enum({
A: 1,
AAAA: 28,
CAA: 257,
CNAME: 5,
DNAME: 39,
MX: 15,
NS: 2,
PTR: 12,
SOA: 6,
SPF: 99,
SRV: 33,
TXT: 16,
} as const);
### type-aliases
### <a id="Enum"></a>Enum
@xylabs/enum
type Enum<T> = { readonly [K in keyof T]: T[K] };
A utility type that, given a Record<string, unknown>, returns a readonly version
of that record. This results in a type where all properties of T are readonly.
Type Parameters
T
T extends Readonly<Record<string | number | symbol, unknown>>
The record type to make readonly.
Example
export const DnsRecordType = Enum({
A: 1,
AAAA: 28,
CAA: 257,
CNAME: 5,
DNAME: 39,
MX: 15,
NS: 2,
PTR: 12,
SOA: 6,
SPF: 99,
SRV: 33,
TXT: 16,
})
export type DnsRecordType = Enum<typeof DnsRecordType>
### <a id="EnumKey"></a>EnumKey
@xylabs/enum
type EnumKey<T, K> = keyof K;
A utility type that, given an Enum object, returns the union of its keys.
Type Parameters
T
T extends Record<string | number | symbol, unknown>
K
K = Enum<T>
### <a id="EnumValue"></a>EnumValue
@xylabs/enum
type EnumValue<T, K> = K[keyof K];
A utility type that, given an Enum object, returns the union of its values.
Type Parameters
T
T extends Record<string | number | symbol, unknown>
K
K = Enum<T>