TypeScript enums: use cases and alternatives