@xylabs/enum


Base functionality used throughout XY Labs TypeScript/JavaScript libraries
Reference
@xylabs/enum
Type Aliases
| Enum | 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. |
| EnumKey | A utility type that, given an Enum object, returns the union of its keys. |
| EnumValue | A utility type that, given an Enum object, returns the union of its values. |
Functions
| Enum | 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). |
functions
Enum
@xylabs/enum
function Enum<T>(obj: Readonly<T>): 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 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
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 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>
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 extends Record<string | number | symbol, unknown> | - |
K | Enum<T> |
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 extends Record<string | number | symbol, unknown> | - |
K | Enum<T> |
Part of sdk-js
Maintainers
License
See the LICENSE file for license details
Credits
Made with š„ and āļø by XYLabs