What if your code could handle any property without breaking or rewriting?
Why Index signatures for dynamic keys in Typescript? - Purpose & Use Cases
Imagine you have a list of users, and each user can have different properties like age, name, or email. You try to write code that accesses these properties one by one, but you don't know all the property names in advance.
Manually writing code for each possible property is slow and messy. If a new property appears, you must change your code everywhere. This leads to mistakes and makes your program hard to maintain.
Index signatures let you tell TypeScript: "I don't know all the property names, but they will follow a pattern." This way, you can safely access any property dynamically without errors or rewriting code.
const user = { name: 'Alice', age: 30 };
console.log(user.name);
console.log(user.age);
// What if user has more properties?interface User {
[key: string]: string | number;
}
const user: User = { name: 'Alice', age: 30 };
console.log(user['name']);
console.log(user['age']);
// Works for any property dynamicallyIt enables flexible and safe access to object properties when keys are not fixed or known in advance.
Think of a settings panel where users can add custom options. Index signatures let your code handle any new option without extra changes.
Manual property handling is slow and error-prone.
Index signatures allow dynamic keys safely.
This makes your code flexible and easier to maintain.
Practice
index signature in TypeScript when working with objects?Solution
Step 1: Understand index signatures
Index signatures let you define objects that can have any number of keys, but all keys must have values of the same type.Step 2: Compare options
To allow objects to have dynamic keys with values of a specific type correctly describes this purpose. Options B, C, and D describe other unrelated concepts.Final Answer:
To allow objects to have dynamic keys with values of a specific type -> Option DQuick Check:
Index signature = dynamic keys with uniform value type [OK]
- Thinking index signatures fix keys instead of allowing dynamic keys
- Confusing index signatures with tuple or array types
- Assuming index signatures restrict to one key-value pair
Solution
Step 1: Recall index signature syntax
The syntax is{ [key: KeyType]: ValueType }. For string keys and number values, it is{ [key: string]: number }.Step 2: Check options
{ [key: string]: number } matches the correct syntax. { [key: number]: string } reverses key and value types. Options B and D are object properties, not index signatures.Final Answer:
{ [key: string]: number } -> Option AQuick Check:
Index signature syntax = {[key: string]: number} [OK]
- Swapping key and value types in the signature
- Using object property syntax instead of index signature
- Using number keys when string keys are intended
console.log(userScores['alice'])?
interface Scores {
[username: string]: number;
}
const userScores: Scores = {
alice: 10,
bob: 15
};
console.log(userScores['alice']);Solution
Step 1: Understand the object and index signature
The interface allows any string key with number values. The object has keys 'alice' and 'bob' with values 10 and 15.Step 2: Access the value for key 'alice'
AccessinguserScores['alice']returns 10, the value assigned to 'alice'.Final Answer:
10 -> Option AQuick Check:
userScores['alice'] = 10 [OK]
- Confusing key with value and expecting 'alice' as output
- Assuming undefined for existing keys
- Mixing up values of different keys
interface Data {
[key: string]: number;
}
const data: Data = {
id: 1,
name: "John"
};Solution
Step 1: Check index signature type
The interface says all keys (strings) must have number values.Step 2: Check object values
The 'id' key has value 1 (number), which is correct. The 'name' key has value "John" (string), which violates the number value rule.Final Answer:
The value of 'name' is a string, but should be a number -> Option BQuick Check:
Value types must match index signature [OK]
- Thinking keys must be numbers instead of strings
- Ignoring value type mismatch errors
- Assuming index signatures allow mixed value types
Solution
Step 1: Understand the requirement
We need an object with number keys (user IDs) and values that are objects with string keys and boolean values.Step 2: Match interface to requirement
interface Preferences { [userId: number]: { [prefKey: string]: boolean } } uses an index signature for userId as number keys, and nested index signature for preference keys as strings with boolean values, matching the requirement exactly.Final Answer:
interface Preferences { [userId: number]: { [prefKey: string]: boolean } } -> Option CQuick Check:
Nested index signatures for dynamic keys [OK]
- Using string keys for userId instead of number
- Confusing property syntax with index signatures
- Not nesting index signatures for inner dynamic keys
Ready to prove it?
Pass the test and this pattern moves unknown
