Packages@accelint/coreSafe enum
getSafeEnumValues
Extracts the values from a SafeEnum as a frozen array with proper typing.
Usage
import { getSafeEnumValues } from '@accelint/core/safe-enum/get-safe-enum-values';
const Status = Object.freeze({
Active: 'active',
Inactive: 'inactive',
Pending: 'pending',
} as const);
const values = getSafeEnumValues(Status);
// ['active', 'inactive', 'pending']Reference
function getSafeEnumValues<TSafeEnum extends ValidEnumStructures>(
safeEnum: TSafeEnum
): readonly [SafeEnum<TSafeEnum>, ...SafeEnum<TSafeEnum>[]]Parameters
| Parameter | Type | Description |
|---|---|---|
safeEnum | ValidEnumStructures | The frozen enum object to extract values from |
Returns
Returns a frozen array containing all enum values with proper non-empty array typing.
Type Parameters
TSafeEnum- The enum object type extending ValidEnumStructures- Return type is
readonly [Value, ...Value[]]- a non-empty readonly tuple
Examples
Example: Validating user input
import { getSafeEnumValues } from '@accelint/core/safe-enum/get-safe-enum-values';
import type { SafeEnum } from '@accelint/core/safe-enum/safe-enum';
const Role = Object.freeze({
Admin: 'admin',
User: 'user',
Guest: 'guest',
} as const);
type Role = SafeEnum<typeof Role>;
const validRoles = getSafeEnumValues(Role);
function isValidRole(input: string): input is Role {
return validRoles.includes(input as Role);
}
isValidRole('admin'); // true
isValidRole('invalid'); // falseExample: Building select options
import { getSafeEnumValues } from '@accelint/core/safe-enum/get-safe-enum-values';
const Priority = Object.freeze({
Low: 'low',
Medium: 'medium',
High: 'high',
Urgent: 'urgent',
} as const);
const priorities = getSafeEnumValues(Priority);
const options = priorities.map(value => ({
value,
label: value.charAt(0).toUpperCase() + value.slice(1)
}));
// [
// { value: 'low', label: 'Low' },
// { value: 'medium', label: 'Medium' },
// ...
// ]Example: Iterating over enum values
import { getSafeEnumValues } from '@accelint/core/safe-enum/get-safe-enum-values';
const Status = Object.freeze({
Draft: 'draft',
Published: 'published',
Archived: 'archived',
} as const);
const statuses = getSafeEnumValues(Status);
for (const status of statuses) {
console.log(`Processing status: ${status}`);
}Good to know: The returned array is frozen (immutable) to prevent accidental modification. Type inference ensures the array is typed as non-empty. Use this function when you need runtime access to enum values, such as for validation, iteration, or building UI elements.
Related
- SafeEnum - Type-safe enum pattern
- isLiteralEnum - Type guard for literal enums