Bird
Raised Fist0
Typescriptprogramming~5 mins

Key remapping with as clause in Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the as clause do in TypeScript's key remapping?
It allows you to rename keys when creating new object types by mapping old keys to new keys.
Click to reveal answer
intermediate
How do you write a mapped type that changes keys from oldKey to newKey?
Use { [K in keyof T as NewKeyType]: T[K] } where NewKeyType is the new key name, often using as to rename.
Click to reveal answer
intermediate
Example: What is the result of this type?
type Rename = { [K in keyof Original as `new_${string & K}`]: Original[K] }
It creates a new type where each key from Original is renamed by prefixing new_ to the original key name.
Click to reveal answer
advanced
Can you use conditional logic inside the as clause for key remapping?
Yes, you can use conditional types to rename keys selectively or exclude keys by mapping them to never.
Click to reveal answer
intermediate
What happens if you map a key to never in the as clause?
That key is removed from the resulting type, effectively filtering out keys.
Click to reveal answer
What is the purpose of the as clause in TypeScript mapped types?
ATo add new keys
BTo rename keys during mapping
CTo change the value types
DTo delete the entire type
How do you exclude a key from a mapped type using the as clause?
AMap the key to <code>undefined</code>
BUse <code>as void</code>
CUse <code>as null</code>
DMap the key to <code>never</code>
Which syntax correctly renames keys in a mapped type?
A{ [K in keyof T as NewKey]: T[K] }
B{ [K in keyof T]: T[K] as NewKey }
C{ [K as NewKey in keyof T]: T[K] }
D{ NewKey in keyof T: T[K] }
What type of keys can you create using template literal types with as clause?
AKeys with dynamic string patterns
BOnly numeric keys
COnly boolean keys
DKeys with fixed names only
If you want to keep the original key name in a remapping, what should you do?
AUse <code>as string</code>
BUse <code>as never</code>
CUse <code>as K</code>
DOmit the <code>as</code> clause
Explain how the as clause works in TypeScript key remapping and give an example.
Think about how you can change key names while keeping values.
You got /3 concepts.
    Describe how to remove keys from a mapped type using the as clause.
    Consider what happens when a key maps to never.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What does the as clause do in a TypeScript mapped type?

      easy
      A. It adds new keys without changing existing ones.
      B. It changes the values of the original type.
      C. It removes keys from the original type.
      D. It renames the keys of the original type to new keys.

      Solution

      1. Step 1: Understand mapped types

        Mapped types create new types by transforming keys or values of an existing type.
      2. Step 2: Role of as clause

        The as clause specifically allows renaming keys during this transformation.
      3. Final Answer:

        It renames the keys of the original type to new keys. -> Option D
      4. Quick Check:

        as clause = rename keys [OK]
      Hint: Remember: as changes keys, not values [OK]
      Common Mistakes:
      • Thinking as changes values instead of keys
      • Confusing as with adding new keys
      • Assuming as removes keys
      2.

      Which of the following is the correct syntax to rename keys in a mapped type using as?

      type Original = { a: number; b: string };
      type Renamed = { [K in keyof Original as ???]: Original[K] };
      easy
      A. as K
      B. `new_${K}`
      C. K as string
      D. K + 'Key'

      Solution

      1. Step 1: Understand template literal types in key remapping

        To rename keys dynamically, template literals like `new_${K}` are used inside the as clause.
      2. Step 2: Check syntax correctness

        Only `new_${K}` is valid syntax for renaming keys using template literals in TypeScript.
      3. Final Answer:

        `new_${K}` -> Option B
      4. Quick Check:

        Use template literals inside as for renaming [OK]
      Hint: Use backticks and ${} for key renaming [OK]
      Common Mistakes:
      • Using plus (+) operator instead of template literals
      • Writing as K inside brackets incorrectly
      • Trying to cast keys with as string
      3.

      What is the resulting type of this code?

      type User = { id: number; name: string };
      type PrefixedUser = { [K in keyof User as `user_${K}`]: User[K] };
      medium
      A. { userId: number; userName: string }
      B. { id: number; name: string }
      C. { user_id: number; user_name: string }
      D. Error: Invalid key remapping

      Solution

      1. Step 1: Analyze key remapping with template literals

        The keys id and name are renamed to userId and userName respectively using `user_${K}`.
      2. Step 2: Confirm values remain unchanged

        The values for each key remain the same as in User.
      3. Final Answer:

        { userId: number; userName: string } -> Option A
      4. Quick Check:

        Keys renamed with prefix 'user_' [OK]
      Hint: Template literals rename keys, values stay same [OK]
      Common Mistakes:
      • Assuming keys stay the same
      • Confusing camelCase with snake_case
      • Expecting a syntax error
      4.

      Identify the error in this mapped type:

      type Data = { x: number; y: string };
      type NewData = { [K in keyof Data as K.toUpperCase()]: Data[K] };
      medium
      A. Cannot use toUpperCase() on type keys directly.
      B. Missing return type for mapped type.
      C. Keys must be numbers, not strings.
      D. Values cannot be accessed with Data[K].

      Solution

      1. Step 1: Check key remapping expression

        The expression K.toUpperCase() is a runtime string method and cannot be used in type-level key remapping.
      2. Step 2: Understand type-level string manipulation

        TypeScript requires template literal types or conditional types for key transformations, not runtime methods.
      3. Final Answer:

        Cannot use toUpperCase() on type keys directly. -> Option A
      4. Quick Check:

        Runtime methods disallowed in type keys [OK]
      Hint: Use template literals, not runtime string methods [OK]
      Common Mistakes:
      • Trying to call string methods on keys in types
      • Confusing runtime and compile-time code
      • Ignoring TypeScript's type system limits
      5.

      Given this type, how would you create a new type that renames only keys starting with is by prefixing them with flag_, keeping others unchanged?

      type Flags = { isActive: boolean; isAdmin: boolean; count: number };
      hard
      A. type NewFlags = { [K in keyof Flags]: Flags[K] };
      B. type NewFlags = { [K in keyof Flags as `flag_${K}`]: Flags[K] };
      C. type NewFlags = { [K in keyof Flags as K extends `is${string}` ? `flag_${K}` : K]: Flags[K] };
      D. type NewFlags = { [K in keyof Flags as K.toLowerCase()]: Flags[K] };

      Solution

      1. Step 1: Use conditional type in as clause

        The condition K extends `is${string}` checks if the key starts with 'is'.
      2. Step 2: Rename keys conditionally

        If true, rename key to `flag_${K}`, else keep original key K.
      3. Step 3: Keep values unchanged

        Values remain the same as in Flags.
      4. Final Answer:

        type NewFlags = { [K in keyof Flags as K extends `is${string}` ? `flag_${K}` : K]: Flags[K] }; -> Option C
      5. Quick Check:

        Conditional key renaming with template literals [OK]
      Hint: Use conditional as with template literals [OK]
      Common Mistakes:
      • Renaming all keys without condition
      • Using runtime string methods in types
      • Not preserving keys that don't match condition
      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