Trong TypeScript, cả Module và Namespace đều được sử dụng để tổ chức mã và quản lý phạm vi của biến, nhưng chúng có những cách sử dụng và ứng dụng khác nhau. Dưới đây là sự khác biệt chính giữa Module và Namespace.
Module là một đơn vị mã có thể xuất và nhập (import/export) các thành phần như hàm, lớp, biến, và interface. Mỗi tệp TypeScript được coi là một module. Khi bạn sử dụng export để xuất một thành phần và import để sử dụng nó ở nơi khác, bạn đang làm việc với các module.
// moduleA.ts
export const greeting = "Hello, World!";
export function greet() {
console.log(greeting);
}
// moduleB.ts
import { greeting, greet } from './moduleA';
console.log(greeting); // Hello, World!
greet(); // Hello, World!
Namespace là một cách để nhóm các thành phần lại với nhau trong một phạm vi nhất định, chủ yếu được sử dụng để tổ chức mã trong ứng dụng lớn. Namespace không sử dụng import và export, mà thay vào đó, nó tự động mở rộng phạm vi cho các thành phần bên trong nó.
namespace MyNamespace {
export const greeting = "Hello, World!";
export function greet() {
console.log(greeting);
}
}
// Sử dụng
console.log(MyNamespace.greeting); // Hello, World!
MyNamespace.greet(); // Hello, World!
import và export, cho phép bạn dễ dàng quản lý các phụ thuộc.import và export và thường được sử dụng trong các tệp cùng một dự án.Sử dụng import và export:
// Tạo module
export class MyClass {
// ...
}
// Sử dụng module
import { MyClass } from './myModule';
Không cần import và export:
namespace MyNamespace {
export class MyClass {
// ...
}
}
// Sử dụng namespace
const instance = new MyNamespace.MyClass();
Tóm lại, cả Module và Namespace đều cung cấp cách tổ chức mã trong TypeScript nhưng được sử dụng trong các bối cảnh khác nhau. Module thích hợp cho các ứng dụng hiện đại, phân tán và hỗ trợ quản lý phụ thuộc tốt hơn, trong khi Namespace thường phù hợp với các ứng dụng nhỏ hoặc mã đã có sẵn, nơi bạn cần tổ chức mã mà không cần chia tách thành nhiều tệp. Việc chọn sử dụng cái nào phụ thuộc vào quy mô của dự án và cách bạn muốn quản lý mã của mình.