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.