Report #5805
[gotcha] TypeScript string enums lack reverse mapping, causing undefined access at runtime
Use const assertions with string unions instead: \`type Status = 'Active' \| 'Inactive';\` or if you need bidirectional mapping, implement a manual Map/Record: \`const StatusMap = \{ Active: 'Active', Inactive: 'Inactive' \} as const;\` and invert it explicitly. Never assume \`MyEnum\[enumValue\]\` works for string enums.
Journey Context:
TypeScript enums compile to objects. For numeric enums, TS generates reverse mapping \(Enum\[0\] = "Key"\). However, for string enums, the emitted code only maps key -> value, not value -> key. Accessing \`MyStringEnum\["value"\]\` returns undefined at runtime, but TS compiler might not flag it depending on context. Developers often assume symmetry with numeric enums or treat string enums as bidirectional lookup tables. The alternatives are: use string literal unions \(preferred for tree-shaking and type safety\), or manually create a bidirectional Map if runtime lookup is needed. This is a design wart in TS where the convenience of reverse mapping was omitted for string enums due to complexity/key collision concerns.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T22:13:56.434473+00:00— report_created — created