Bird
Raised Fist0
Typescriptprogramming~5 mins

Declaration merging for namespaces in Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is declaration merging in TypeScript namespaces?
Declaration merging is when multiple namespace declarations with the same name combine their contents into a single namespace.
Click to reveal answer
beginner
How does TypeScript handle multiple namespace declarations with the same name?
TypeScript merges all declarations with the same namespace name into one, combining their members like variables, functions, or interfaces.
Click to reveal answer
intermediate
Can you add functions and variables in separate namespace declarations and have them accessible together?
Yes, functions and variables declared in separate namespace blocks with the same name are merged and accessible as if declared in one namespace.
Click to reveal answer
advanced
What happens if two merged namespaces declare the same function name with different implementations?
TypeScript will merge the declarations, but the last implementation will overwrite previous ones, so only one function body is used.
Click to reveal answer
intermediate
Why is declaration merging useful in namespaces?
It allows splitting code into multiple parts or files while keeping related code grouped under one namespace, improving organization and modularity.
Click to reveal answer
What does declaration merging for namespaces allow you to do?
AMerge classes with namespaces
BCombine multiple namespace declarations with the same name into one
CAutomatically convert namespaces to classes
DPrevent namespaces from having the same name
If two namespaces with the same name declare different variables, what happens?
AAn error occurs due to duplicate declarations
BOnly the first namespace's variables are kept
CVariables from both namespaces are merged and accessible
DVariables are renamed automatically
Can declaration merging be used across multiple files?
AYes, namespaces with the same name in different files merge
BOnly if files are imported as modules
CNo, it only works within a single file
DOnly for classes, not namespaces
What happens if two merged namespaces declare a function with the same name but different code?
AThe functions are merged into one combined function
BTypeScript throws an error
CBoth functions exist separately
DThe last declared function overwrites the previous one
Why might you use declaration merging for namespaces?
ATo split related code into multiple parts but keep it under one namespace
BTo avoid using namespaces altogether
CTo automatically generate classes
DTo merge unrelated code into one file
Explain how declaration merging works for namespaces in TypeScript and why it is useful.
Think about how you can write parts of a namespace in different places and still access all members together.
You got /4 concepts.
    Describe what happens when two merged namespaces declare a function with the same name but different implementations.
    Consider which function code TypeScript uses when names collide.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does declaration merging for namespaces in TypeScript allow you to do?
      easy
      A. Merge classes and interfaces automatically
      B. Combine multiple namespace blocks with the same name into one namespace
      C. Create multiple namespaces with different names in one file
      D. Prevent namespaces from being extended

      Solution

      1. Step 1: Understand declaration merging concept

        Declaration merging means combining multiple declarations of the same name into one.
      2. Step 2: Apply to namespaces

        For namespaces, this means multiple blocks with the same namespace name merge into a single namespace.
      3. Final Answer:

        Combine multiple namespace blocks with the same name into one namespace -> Option B
      4. Quick Check:

        Declaration merging = Combine namespaces [OK]
      Hint: Namespaces with same name merge into one combined namespace [OK]
      Common Mistakes:
      • Thinking namespaces with different names merge
      • Confusing merging with class or interface merging
      • Believing merging prevents extension
      2. Which of the following is the correct syntax to merge two namespace declarations named Utils?
      easy
      A. namespace Utils { export function a() {} } namespace Utils { export function b() {} }
      B. namespace Utils { export function a() {} } namespace Utils2 { export function b() {} }
      C. namespace Utils { export function a() {} } class Utils { }
      D. namespace Utils { export function a() {} } interface Utils { }

      Solution

      1. Step 1: Check namespace names

        Only namespaces with the exact same name merge. namespace Utils { export function a() {} } namespace Utils { export function b() {} } uses "Utils" twice.
      2. Step 2: Verify syntax correctness

        namespace Utils { export function a() {} } namespace Utils { export function b() {} } correctly declares two namespace blocks with functions inside, which will merge.
      3. Final Answer:

        namespace Utils { export function a() {} } namespace Utils { export function b() {} } -> Option A
      4. Quick Check:

        Same namespace name + multiple blocks = merge [OK]
      Hint: Use identical namespace names to merge declarations [OK]
      Common Mistakes:
      • Using different namespace names expecting merge
      • Mixing namespace with class or interface of same name
      • Incorrect syntax for namespace blocks
      3. What will be the output of the following TypeScript code?
      namespace Data {
        export const value = 10;
      }
      namespace Data {
        export function getValue() { return value; }
      }
      console.log(Data.getValue());
      medium
      A. 10
      B. undefined
      C. ReferenceError
      D. SyntaxError

      Solution

      1. Step 1: Understand namespace merging

        Both namespace blocks named "Data" merge into one namespace containing both value and getValue.
      2. Step 2: Evaluate function call

        getValue() returns value which is 10, so console.log prints 10.
      3. Final Answer:

        10 -> Option A
      4. Quick Check:

        Merged namespace members accessible = 10 [OK]
      Hint: Merged namespaces share members, so functions access variables [OK]
      Common Mistakes:
      • Assuming separate namespaces, so value is undefined
      • Expecting runtime errors due to merging
      • Confusing variable scope inside merged namespaces
      4. Identify the error in the following code that attempts to merge namespaces:
      namespace Tools {
        export function toolA() { return 'A'; }
      }
      namespace Tools {
        const secret = 'hidden';
        export function toolB() { return secret; }
      }
      medium
      A. Functions cannot be declared in merged namespaces
      B. Duplicate namespace name causes syntax error
      C. Cannot access non-exported 'secret' in merged namespace
      D. 'secret' must be exported to be used inside toolB

      Solution

      1. Step 1: Check variable scope in merged namespaces

        The variable secret is declared but not exported, so it is private to its namespace block.
      2. Step 2: Analyze usage of 'secret' in toolB

        Function toolB tries to return secret, but since secret is not accessible outside its block, this causes an error.
      3. Final Answer:

        Cannot access non-exported 'secret' in merged namespace -> Option C
      4. Quick Check:

        Non-exported members are block-scoped [OK]
      Hint: Non-exported members are private to their block, not merged [OK]
      Common Mistakes:
      • Assuming all members merge regardless of export
      • Thinking duplicate namespace names cause syntax errors
      • Believing functions can't be declared in merged namespaces
      5. Given two namespace declarations below, what will console.log(Shapes.area(5)); output?
      namespace Shapes {
        export function area(radius: number) {
          return Math.PI * radius * radius;
        }
      }
      namespace Shapes {
        export function perimeter(radius: number) {
          return 2 * Math.PI * radius;
        }
        export function area(radius: number) {
          return Math.round(Math.PI * radius * radius);
        }
      }
      console.log(Shapes.area(5));
      hard
      A. 78.53981633974483
      B. Error: Duplicate function name
      C. NaN
      D. 79

      Solution

      1. Step 1: Understand merging with duplicate function names

        When namespaces merge, later declarations override earlier ones for the same member name.
      2. Step 2: Identify which 'area' function is used

        The second namespace redefines area with rounding. So Shapes.area(5) calls the rounded version.
      3. Step 3: Calculate output

        Math.PI * 5 * 5 ≈ 78.5398, rounded is 79.
      4. Final Answer:

        79 -> Option D
      5. Quick Check:

        Later declarations override earlier ones [OK]
      Hint: Later namespace members override earlier ones with same name [OK]
      Common Mistakes:
      • Expecting both functions to coexist without override
      • Thinking duplicate function names cause errors
      • Ignoring rounding in second area function
      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