
Classes và Module trong TypeScript
27 June, 2025Module 4 - Classes và Module trong TypeScript
- Bài viết này nằm trong khuôn khổ của: Bài 2 - Dựng khung dự án website bán thẻ Pokemon.
Bạn nào chưa đọc thì có thể đọc tại đây.
Việc tổ chức mã nguồn và tận dụng các khái niệm lập trình hướng đối tượng (OOP) là vô cùng quan trọng. Tiếp nối các bài viết trước về TypeScript, hôm nay tôi muốn chia sẻ những kiến thức cốt lõi từ Module 4, phần cuối cùng của chuỗi bài "Dựng khung dự án" – tập trung vào Class và Module. Đây không chỉ là những tính năng cơ bản mà còn là chìa khóa để chúng ta xây dựng các ứng dụng mạnh mẽ, dễ bảo trì.
1. Class trong TypeScript
TypeScript hỗ trợ đầy đủ các tính năng của lập trình hướng đối tượng thông qua class, mang lại cấu trúc và khả năng tái sử dụng cao cho mã nguồn.
-
Thành viên của Class (Class Members):
- Thuộc tính (Properties): Là các biến lưu trữ dữ liệu của đối tượng. Bạn có thể định nghĩa kiểu cho từng thuộc tính. Nếu không gán giá trị mặc định, TypeScript sẽ tự động gán là
any. - Khởi tạo giá trị mặc định: Có thể gán giá trị mặc định cho thuộc tính ngay khi khai báo, hoặc trong hàm khởi tạo (
constructor). Giá trị này sẽ tự động được áp dụng khi class được khởi tạo.strictPropertyInitialization: Cài đặt này yêu cầu các trường của class phải được khởi tạo giá trị ban đầu. Nếu không khởi tạo, bạn cần thêm dấu!(non-null assertion operator) sau tên thuộc tính hoặc gán giá trịundefined.
- Thuộc tính (Properties): Là các biến lưu trữ dữ liệu của đối tượng. Bạn có thể định nghĩa kiểu cho từng thuộc tính. Nếu không gán giá trị mặc định, TypeScript sẽ tự động gán là
-
Getters và Setters: Cung cấp cơ chế kiểm soát việc truy cập và thay đổi giá trị của thuộc tính, tương tự như các ngôn ngữ lập trình hướng đối tượng khác như Java hay C++.
- Getter (
get): Để đọc giá trị của thuộc tính. Nếu getter tồn tại nhưng không định nghĩa setter, thuộc tính sẽ tự động được đặt làreadonly. - Setter (
set): Để gán giá trị cho thuộc tính. - Quy tắc: Nếu kiểu của setter không được định nghĩa, nó sẽ được lấy từ kiểu trả về của getter.
- Getter (
-
Kế thừa Class (Class Heritage) -
extends: Cho phép một class kế thừa các thuộc tính và phương thức từ một class khác. Đây là cơ chế mạnh mẽ để tái s ử dụng code và xây dựng hệ thống phân cấp đối tượng.- Ví dụ: Một class
Dogcó thể kế thừa từ classAnimal, tức làDogsẽ có tất cả các phương thức và thuộc tính củaAnimal, đồng thời có thể thêm các hành vi riêng của mình (ví dụ:woof()).
- Ví dụ: Một class
-
Triển khai Interface (Implements): Một class có thể triển khai một hoặc nhiều
interface, đảm bảo rằng class đó tuân thủ một bộ quy tắc về cấu trúc và hành vi.- Ví dụ: Class
Ballcó thể implement interfacePingable, đảm bảo rằng nó có phương thứcping().
- Ví dụ: Class
-
Ghi đè phương thức (Method Overriding): Class con có thể định nghĩa lại phương thức của class cha để thay đổi hành vi của nó.
2. Member Visibility
TypeScript cung cấp ba cấp độ hiển thị cho thành viên của class, kiểm soát khả năng truy cập từ bên ngoài hoặc từ các class con.
public(Mặc định): Thành viênpubliccó thể truy cập từ bất cứ đâu.protected: Thành viênprotectedchỉ có thể truy cập từ class đó và các class con của nó. Không thể truy cập từ bên ngoài class hoặc các class không kế thừa.private: Thành viênprivatechỉ có thể truy cập được từ bên trong class mà nó được khai báo. Đây là cấp độ hạn chế nhất.
3. Module trong TypeScript
Module là một cách mạnh mẽ để tổ chức mã nguồn, giúp chia nhỏ ứng d ụng thành các phần nhỏ hơn, dễ quản lý và tái sử dụng.
- ES Module (Phổ biến nhất): Đây là chuẩn module hiện đại, được sử dụng rộng rãi trong JavaScript và TypeScript.
Export mặc định (export default): Chỉ cho phép xuất một thành phần duy nhất từ một module.
Import mặc định: Dùng để nhập thành phần được export default.
Export có tên (export): Cho phép xuất nhiều biến, hàm, class từ một module.
Import có tên: Nhập các thành phần được export có tên.
-
Đổi tên khi import: Sử dụng từ khóa
asđể đổi tên thành phần khi import. -
Import tất cả (
import * as ...): Nhập tất cả các thành phần được export có tên vào một đối tượng. -
CommonJS (Chủ yếu trong Node.js): Là hệ thống module truyền thống trong Node.js, sử dụng
module.exportsđể xuất vàrequire()để nhập.- Export: Gán các thành phần vào
module.exports. - Import: Sử dụng hàm
require().
- Export: Gán các thành phần vào
Lời Kết:
Class và Module là hai khái niệm nền tảng, không thể thiếu khi xây dựng các ứng dụng TypeScript. Class giúp chúng ta tổ chức code theo hướng đối tượng, tạo ra các blueprint cho các đối tượng và cho phép kế thừa, ghi đè. Module giúp chúng ta chia nhỏ ứng dụng, quản lý sự phụ thuộc và tái sử dụng code hiệu quả.
Với những kiến thức về Class và Module, bạn đã sẵn sàng để bắt tay vào xây d ựng các dự án TypeScript lớn hơn, có cấu trúc rõ ràng và dễ bảo trì. Đây cũng là Module cuối cùng trong chuỗi bài giới thiệu cơ bản về TypeScript. Ở những video tiếp theo, chúng ta sẽ đi sâu vào tìm hiểu các thư viện phổ biến và cách cấu hình dự án trong môi trường thực tế.
Trong quá trình thực hiện dự án này không may có sai sót, rất mong nhận được sự góp ý từ các bạn để mình có thể hoàn thiện hơn trong tương lai.
Hẹn gặp lại trong những chia sẻ sắp tới. Chúc các bạn học tập và làm việc hiệu quả!
