#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
4 min read
Question 44 of 48medium

What is the difference between Namespace and Module?

Organizing TypeScript code.

What You'll Learn

  • Namespaces (internal modules)
  • ES Modules (external modules)
  • When to use each

Namespaces

Legacy TypeScript pattern for organizing code.

code.tsTypeScript
namespace Validation {
  export interface Validator {
    validate(value: string): boolean;
  }

  export class EmailValidator implements Validator {
    validate(value: string): boolean {
      return value.includes("@");
    }
  }
}

const validator = new Validation.EmailValidator();

ES Modules (Preferred)

Standard JavaScript module system.

code.tsTypeScript
// validator.ts
export interface Validator {
  validate(value: string): boolean;
}

export class EmailValidator implements Validator {
  validate(value: string): boolean {
    return value.includes("@");
  }
}

// app.ts
import { EmailValidator } from "./validator";
const validator = new EmailValidator();

Comparison

FeatureNamespaceModule
StandardTypeScript onlyES standard
File scopeNo (global)Yes
Tree-shakingNoYes
Modern bundlersLimitedFull support

When to Use

  • Modules: Always for new code
  • Namespaces: Legacy code, ambient declarations