4 min read
•Question 44 of 48mediumWhat 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
| Feature | Namespace | Module |
|---|---|---|
| Standard | TypeScript only | ES standard |
| File scope | No (global) | Yes |
| Tree-shaking | No | Yes |
| Modern bundlers | Limited | Full support |
When to Use
- Modules: Always for new code
- Namespaces: Legacy code, ambient declarations