codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
🔷

TypeScript

31 / 60 topics
30Modules in TypeScript31Namespaces32Ambient Modules
Tutorials/TypeScript/Namespaces
🔷TypeScript

Namespaces

Updated 2026-05-15
10 min read

Namespaces

Introduction

In TypeScript, as in other programming languages, managing the scope of variables and functions is crucial to prevent naming conflicts. One effective way to handle this is by using namespaces. A namespace groups related code together under a single name, which helps organize code and avoid collisions between identifiers with the same name.

Namespaces are particularly useful in large projects where multiple developers might be working on different parts of the application simultaneously. By encapsulating code within namespaces, you can ensure that functions, classes, interfaces, etc., do not interfere with each other unless explicitly imported.

Concept

A namespace is essentially a container for logically related code. It allows you to define types and values in a way that they are scoped to the namespace itself, rather than globally. This means that even if two different namespaces have functions or variables with the same name, there will be no conflict because they exist within separate scopes.

To declare a namespace, you use the namespace keyword followed by the name of the namespace and a block of code containing the members of the namespace.

Examples

Basic Namespace Usage

Let's start with a simple example to illustrate how namespaces work. Suppose we have two different modules that both define a function called greet. Without namespaces, these functions would conflict. However, by using namespaces, we can avoid this issue.

// File: greetings.ts
namespace Greetings {
    export function greet(name: string) {
        return `Hello, \${name}!`;
    }
}

// File: farewells.ts
namespace Farewells {
    export function greet(name: string) {
        return `Goodbye, \${name}!`;
    }
}

In this example, we have two namespaces: `Greetings` and `Farewells`. Each namespace has a `greet` function that takes a name as an argument and returns a greeting message. Since these functions are within different namespaces, they do not conflict with each other.

To use the functions defined in these namespaces, you need to reference them using the dot notation:

```typescript
// File: main.ts
import './greetings';
import './farewells';

console.log(Greetings.greet('Alice')); // Output: Hello, Alice!
console.log(Farewells.greet('Bob'));   // Output: Goodbye, Bob!

Nested Namespaces

Namespaces can also be nested within each other. This is useful for organizing code into a hierarchical structure that reflects the logical relationships between different parts of your application.

// File: greetings.ts
namespace Greetings {
    export namespace Formal {
        export function greet(name: string) {
            return `Greetings, \${name}!`;
        }
    }

    export namespace Informal {
        export function greet(name: string) {
            return `Hi, \${name}!`;
        }
    }
}

In this example, we have nested namespaces within the `Greetings` namespace. The `Formal` and `Informal` namespaces each have their own `greet` function.

To use these functions, you would reference them like this:

```typescript
// File: main.ts
import './greetings';

console.log(Greetings.Formal.greet('Alice')); // Output: Greetings, Alice!
console.log(Greetings.Informal.greet('Bob'));   // Output: Hi, Bob!

Merging Namespaces

TypeScript allows you to merge namespaces. This means that if two or more namespace declarations with the same name are found in different files, they will be combined into a single namespace.

// File: greetings1.ts
namespace Greetings {
    export function greet(name: string) {
        return `Hello, \${name}!`;
    }
}

// File: greetings2.ts
namespace Greetings {
    export function farewell(name: string) {
        return `Goodbye, \${name}!`;
    }
}

In this example, the `Greetings` namespace is defined in two separate files. When these files are compiled together, TypeScript will merge them into a single namespace that contains both the `greet` and `farewell` functions.

```typescript
// File: main.ts
import './greetings1';
import './greetings2';

console.log(Greetings.greet('Alice'));    // Output: Hello, Alice!
console.log(Greetings.farewell('Bob'));  // Output: Goodbye, Bob!

What's Next?

In the next section, we will explore ambient modules. Ambient modules allow you to declare external libraries and their types without having to include the actual implementation of those libraries in your project. This is particularly useful when working with third-party JavaScript libraries that do not have TypeScript definitions.

Stay tuned for more advanced topics in TypeScript!


PreviousModules in TypeScriptNext Ambient Modules

Recommended Gear

Modules in TypeScriptAmbient Modules