Bird
Raised Fist0
Typescriptprogramming~5 mins

Index signatures for dynamic keys in Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is an index signature in TypeScript?
An index signature allows you to define the type of keys and values for objects with dynamic keys, meaning keys that are not known in advance.
Click to reveal answer
beginner
How do you declare an index signature for an object with string keys and number values?
You write: { [key: string]: number } which means any string key maps to a number value.
Click to reveal answer
intermediate
Can index signatures use types other than string for keys?
Yes, index signatures can use string or number as key types, but not other types like boolean.
Click to reveal answer
intermediate
What happens if you mix explicit properties and an index signature in a TypeScript interface?
Explicit properties must have types compatible with the index signature's value type, otherwise TypeScript will show an error.
Click to reveal answer
beginner
Why are index signatures useful in real-life programming?
They let you work with objects where keys are not fixed, like dictionaries or maps, making your code flexible and type-safe.
Click to reveal answer
Which syntax correctly declares an index signature for an object with string keys and boolean values?
A{ key: string; value: boolean }
B{ [key: boolean]: string }
C{ [key: number]: boolean }
D{ [key: string]: boolean }
What type can NOT be used as an index signature key in TypeScript?
Aboolean
Bnumber
Cstring
Dall of the above can be used
If an interface has an index signature { [key: string]: number }, what type must explicit properties have?
Astring
Bnumber
Cany
Dboolean
What does this index signature mean? { [id: number]: string }
AKeys are numbers, values are strings
BKeys are strings, values are numbers
CKeys and values are both numbers
DKeys and values are both strings
Why use index signatures instead of fixed property names?
ATo restrict keys to a fixed set
BTo make code slower
CTo allow objects with unknown or dynamic keys
DTo avoid using types
Explain what an index signature is and how it helps with dynamic keys in TypeScript.
Think about objects where keys are not fixed but you still want to know the type of values.
You got /3 concepts.
    Describe the rules for mixing explicit properties and index signatures in a TypeScript interface.
    Consider what happens if explicit property types don't match the index signature type.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of an index signature in TypeScript when working with objects?
      easy
      A. To create arrays with fixed length
      B. To define fixed keys with different types for each key
      C. To restrict objects to only one key-value pair
      D. To allow objects to have dynamic keys with values of a specific type

      Solution

      1. 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.
      2. 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.
      3. Final Answer:

        To allow objects to have dynamic keys with values of a specific type -> Option D
      4. Quick Check:

        Index signature = dynamic keys with uniform value type [OK]
      Hint: Index signatures mean dynamic keys with same value type [OK]
      Common Mistakes:
      • 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
      2. Which of the following is the correct syntax for an index signature allowing string keys and number values in TypeScript?
      easy
      A. { [key: string]: number }
      B. { key: string; value: number }
      C. { [key: number]: string }
      D. { key: number; value: string }

      Solution

      1. Step 1: Recall index signature syntax

        The syntax is { [key: KeyType]: ValueType }. For string keys and number values, it is { [key: string]: number }.
      2. 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.
      3. Final Answer:

        { [key: string]: number } -> Option A
      4. Quick Check:

        Index signature syntax = {[key: string]: number} [OK]
      Hint: Index signature syntax: {[key: KeyType]: ValueType} [OK]
      Common Mistakes:
      • Swapping key and value types in the signature
      • Using object property syntax instead of index signature
      • Using number keys when string keys are intended
      3. Given the following TypeScript code, what will be the output of console.log(userScores['alice'])?
      interface Scores {
        [username: string]: number;
      }
      const userScores: Scores = {
        alice: 10,
        bob: 15
      };
      console.log(userScores['alice']);
      medium
      A. 10
      B. alice
      C. undefined
      D. 15

      Solution

      1. 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.
      2. Step 2: Access the value for key 'alice'

        Accessing userScores['alice'] returns 10, the value assigned to 'alice'.
      3. Final Answer:

        10 -> Option A
      4. Quick Check:

        userScores['alice'] = 10 [OK]
      Hint: Access dynamic key value directly with bracket notation [OK]
      Common Mistakes:
      • Confusing key with value and expecting 'alice' as output
      • Assuming undefined for existing keys
      • Mixing up values of different keys
      4. Identify the error in the following TypeScript code using an index signature:
      interface Data {
        [key: string]: number;
      }
      const data: Data = {
        id: 1,
        name: "John"
      };
      medium
      A. The interface should use [key: number] instead
      B. The value of 'name' is a string, but should be a number
      C. Index signatures cannot use string keys
      D. The key 'id' should be a number, not a string

      Solution

      1. Step 1: Check index signature type

        The interface says all keys (strings) must have number values.
      2. 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.
      3. Final Answer:

        The value of 'name' is a string, but should be a number -> Option B
      4. Quick Check:

        Value types must match index signature [OK]
      Hint: All values must match index signature type [OK]
      Common Mistakes:
      • Thinking keys must be numbers instead of strings
      • Ignoring value type mismatch errors
      • Assuming index signatures allow mixed value types
      5. You want to create a TypeScript object to store user preferences where keys are user IDs (numbers) and values are objects with dynamic string keys and boolean values. Which of the following interface definitions correctly models this?
      hard
      A. interface Preferences { [userId: string]: { [prefKey: number]: boolean } }
      B. interface Preferences { userId: number; prefKey: string; value: boolean }
      C. interface Preferences { [userId: number]: { [prefKey: string]: boolean } }
      D. interface Preferences { [userId: number]: { prefKey: string; value: boolean } }

      Solution

      1. 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.
      2. 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.
      3. Final Answer:

        interface Preferences { [userId: number]: { [prefKey: string]: boolean } } -> Option C
      4. Quick Check:

        Nested index signatures for dynamic keys [OK]
      Hint: Use nested index signatures for nested dynamic keys [OK]
      Common Mistakes:
      • Using string keys for userId instead of number
      • Confusing property syntax with index signatures
      • Not nesting index signatures for inner dynamic keys
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard