Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

Tìm hiểu Các Kiểu Dữ Liệu Cơ Bản Trong TypeScript

TypeScript, một superset của JavaScript, mang lại sự mạnh mẽ nhờ hệ thống kiểu tĩnh (static typing). Trong bài viết này, chúng ta sẽ khám phá Data Type (kiểu dữ liệu) trong TypeScript, hiểu rõ cách sử dụng và lợi ích mà chúng mang lại trong việc xây dựng ứng dụng lớn và bền vững.

Data Type Là Gì?

Trong lập trình, data type xác định loại dữ liệu mà một biến có thể chứa, như số, chuỗi, hay boolean. TypeScript mở rộng JavaScript bằng cách bổ sung hệ thống kiểu tĩnh, cho phép bạn khai báo kiểu dữ liệu và giúp phát hiện lỗi ngay từ khi biên dịch.

Các Kiểu Dữ Liệu Cơ Bản Trong TypeScript

Kiểu nguyên thủy (Primitive Types)

TypeScript hỗ trợ các kiểu dữ liệu nguyên thủy như:

  • number (số)
  • string (chuỗi)
  • boolean (giá trị đúng/sai) Ví dụ:
let age: number = 25;
let username: string = "Alice";
let isActive: boolean = true;

Kiểu đặc biệt (Special Types)

  • any: Biến có thể chứa bất kỳ kiểu dữ liệu nào. Nên tránh sử dụng nếu không cần thiết.
  • unknown: Giống any, nhưng an toàn hơn vì cần kiểm tra kiểu trước khi sử dụng.
  • void: Thường dùng cho hàm không trả về giá trị.
  • never: Dùng cho các hàm không bao giờ kết thúc (ví dụ: ném lỗi hoặc vòng lặp vô hạn). Ví dụ:
let data: any = "Hello";
let result: void = undefined;

function throwError(message: string): never {
  throw new Error(message);
}

Kiểu dữ liệu kết hợp (Union Types)

Cho phép một biến có nhiều kiểu dữ liệu. Ví dụ:

let id: number | string;
id = 101;    // hợp lệ
id = "abc";  // cũng hợp lệ

Kiểu dữ liệu tùy chỉnh (Custom Types)

Sử dụng type hoặc interface để tạo kiểu phức tạp hơn.

type User = {
  id: number;
  name: string;
  email?: string; // email là tùy chọn
};

let user: User = {
  id: 1,
  name: "Alice",
};

Các Kiểu Dữ Liệu Nâng Cao

Enum

Enum giúp định nghĩa một tập hợp các hằng số có tên. Ví dụ:

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}

let favoriteColor: Color = Color.Green;

Tuple

Tuple là mảng với số lượng phần tử cố định và kiểu xác định cho từng phần tử. Ví dụ:

let tuple: [string, number];
tuple = ["Alice", 25];

Array

TypeScript hỗ trợ hai cách định nghĩa kiểu mảng:

  1. Sử dụng type[]
  2. Sử dụng Array<type> Ví dụ:
let numbers: number[] = [1, 2, 3];
let strings: Array<string> = ["one", "two", "three"];

Interface và Class

Dùng để mô tả hoặc tạo các đối tượng phức tạp. Ví dụ:

interface Person {
  name: string;
  age: number;
  greet(): void;
}

let person: Person = {
  name: "Bob",
  age: 30,
  greet() {
    console.log("Hello!");
  },
};

Tính Linh Hoạt Với TypeScript

Hệ thống kiểu của TypeScript không chỉ giúp phát hiện lỗi mà còn tăng tính rõ ràng, dễ bảo trì. Ví dụ, khi làm việc với hàm, bạn có thể định nghĩa kiểu dữ liệu cho tham số và giá trị trả về. Ví dụ:

function add(a: number, b: number): number {
  return a + b;
}

Lợi Ích Của Việc Sử Dụng Data Type

  • Phát hiện lỗi sớm: Giảm rủi ro lỗi khi chạy ứng dụng.
  • Tăng năng suất: IDE cung cấp gợi ý thông minh hơn dựa trên kiểu dữ liệu.
  • Dễ bảo trì: Mã nguồn rõ ràng và dễ hiểu hơn.

Gán kiểu(Type Assignment)

Khi tạo 1 variable, có hai cách chính để gán kiểu

  • Explicit: Rõ ràng
  • Implicit: Ngầm định

Explicit Type Assignment (Gán kiểu rõ ràng)

Bạn chỉ định rõ kiểu dữ liệu cho biến hoặc tham số ngay khi khai báo. Cú pháp:

let age: number = 30;
let name: string = "Alice";
  • Ưu điểm:
    • Tính rõ ràng: Loại dữ liệu của biến được định nghĩa rõ ràng, giúp mã dễ đọc và bảo trì hơn.
    • Giảm lỗi: Dễ phát hiện các lỗi do gán sai kiểu.
    • Hữu ích trong môi trường phức tạp: Với các hàm phức tạp hoặc khi làm việc với API, việc gán kiểu rõ ràng giúp hạn chế sai sót.
  • Nhược điểm:
    • Mã dài hơn: Cần phải viết thêm kiểu dữ liệu.
    • Không cần thiết trong một số trường hợp: Khi TypeScript có thể tự suy luận được kiểu.

Implicit Type Assignment (Gán kiểu ngầm định)

TypeScript tự suy luận kiểu dữ liệu dựa trên giá trị khởi tạo của biến. Cú pháp:

let age = 30; // TypeScript tự hiểu age là kiểu number
let name = "Alice"; // TypeScript tự hiểu name là kiểu string
  • Ưu điểm:
    • Ngắn gọn: Ít phải viết thêm mã, giúp mã trông sạch hơn.
    • Thích hợp với các biến đơn giản: Với các giá trị dễ hiểu, việc gán kiểu ngầm định giúp mã không rườm rà.
  • Nhược điểm:
    • Thiếu rõ ràng: Người đọc mã không thể biết ngay kiểu dữ liệu nếu không nhìn giá trị khởi tạo.
    • Dễ xảy ra lỗi không mong muốn: Nếu không có giá trị khởi tạo hoặc giá trị khởi tạo không rõ ràng, việc suy luận kiểu có thể gây hiểu nhầm.

Kết Luận

Hiểu và sử dụng đúng Data Type trong TypeScript không chỉ giúp mã của bạn an toàn hơn mà còn tăng hiệu suất làm việc. Hãy tận dụng các kiểu dữ liệu cơ bản và nâng cao của TypeScript để xây dựng các ứng dụng mạnh mẽ, dễ bảo trì!