TypeScript JSON

How do I handle dynamic or changing keys in a JSON-derived interface?

Handle dynamic JSON keys in TypeScript using index signatures, Record types, or Map structures. Index signatures allow arbitrary keys: interface DynamicObject { [key: string]: ValueType }. Use Record<Keys, ValueType> for finite key sets: Record<"en" | "es", Translation>. For completely dynamic keys, Map provides better type safety than plain objects. Template literal types constrain key patterns: Record<`user_${string}`, User>. Use utility types Partial, Required, or Pick when only some keys are known. Discriminated unions handle different key combinations: type Response = TypeA | TypeB. For API responses with variable keys, define flexible base interface with optional properties. Consider refactoring JSON structure if dynamic keys make typing overly complex. Runtime validation with Zod or io-ts ensures dynamic keys meet expectations. Validate JSON structure with our JSON Viewer at jsonconsole.com/json-viewer to understand key patterns before typing. TypeScript excels with known structures; excessive dynamism reduces type safety benefits. Balance flexibility with type safety, using stricter types where possible and dynamic signatures only where necessary for truly variable data.
Last updated: December 23, 2025

Still have questions?

Can't find the answer you're looking for? Please reach out to our support team.