Chào các bạn! Hôm nay tôi sẽ cùng các bạn tìm hiểu về hai khái niệm rất quan trọng trong TypeScript: Type Annotation và Type Inference. Tại sao chúng lại quan trọng và nên sử dụng chúng như thế nào? Bài viết này sẽ giúp các bạn hiểu rõ từ cơ bản đến nâng cao về hai khái niệm này.

Type Annotation trong TypeScript

Định nghĩa Type Annotation

Type Annotation (Ghi chú kiểu dữ liệu) là việc chúng ta định rõ kiểu dữ liệu cho biến, hàm, hoặc đối tượng ngay tại thời điểm khai báo. Việc này giúp cho code dễ đọc, dễ hiểu hơn, và đặc biệt hữu ích trong việc phòng tránh lỗi do sai kiểu dữ liệu.

Cú pháp Type Annotation

Để khai báo Type Annotation, chúng ta sử dụng dấu hai chấm (:) sau tên biến hoặc hàm, theo sau đó là tên kiểu dữ liệu.

let age: number = 25;
let name: string = "John Doe";
function greet(name: string): string {
    return `Hello, ${name}`;
}

Ví dụ cơ bản về Type Annotation

Dưới đây là một số ví dụ đơn giản về Type Annotation.

let isStudent: boolean = true;
let scores: number[] = [98, 85, 76];
let user: { name: string, age: number } = { name: "Alice", age: 30 };

Ví dụ nâng cao về Type Annotation

Bây giờ hãy xem một số ví dụ phức tạp hơn về Type Annotation, bao gồm các kiểu dữ liệu tùy biến và hàm.

type Person = {
    name: string;
    age: number;
    isStudent?: boolean; // Optional property
};

let person: Person = {
    name: "Bob",
    age: 25
};

function sum(a: number, b: number, c: number = 0): number {
    return a + b + c;
}

Type Inference trong TypeScript

Định nghĩa Type Inference

Type Inference (Suy luận kiểu dữ liệu) là khả năng của TypeScript để tự động xác định kiểu dữ liệu dựa trên giá trị được gán cho biến hoặc hàm mà không cần phải sử dụng Type Annotation.

Cú pháp Type Inference

Khi khai báo biến mà không sử dụng Type Annotation, TypeScript sẽ tự động suy luận kiểu dữ liệu dựa trên giá trị gán cho biến đó.

let age = 25; // TypeScript sẽ suy ra age có kiểu number
let name = "John Doe"; // Kiểu string
let isStudent = true; // Kiểu boolean

Ví dụ cơ bản về Type Inference

Dưới đây là một số ví dụ đơn giản về Type Inference.

let scores = [98, 85, 76]; // TypeScript sẽ suy ra scores có kiểu number[]
let user = { name: "Alice", age: 30 }; // Kiểu { name: string, age: number }

Ví dụ nâng cao về Type Inference

Bây giờ hãy xem một số ví dụ phức tạp hơn về Type Inference, bao gồm các hàm và kiểu dữ liệu tùy biến.

function greet(name = "Guest") {
    return `Hello, ${name}`;
}

let person = {
    name: "Bob",
    age: 25
};

// TypeScript sẽ suy ra hàm greet trả về kiểu string và person có kiểu { name: string, age: number }

So sánh Type Annotation và Type Inference

Ưu điểm của Type Annotation

  • Rõ ràng, dễ hiểu: Các kiểu dữ liệu được định nghĩa rõ ràng và làm cho code dễ đọc hơn.
  • Giúp phát hiện lỗi sớm: Việc chỉ định kiểu dữ liệu giúp TypeScript phát hiện lỗi sai kiểu dữ liệu ngay trong quá trình viết code.

Ưu điểm của Type Inference

  • Tiết kiệm thời gian: Giảm bớt sự cần thiết phải khai báo kiểu dữ liệu cho tất cả các biến.
  • Giữ cho code gọn gàng: Suy luận kiểu dữ liệu tự động giúp cho mã nguồn trông sạch sẽ hơn.

Khi nào sử dụng Type Annotation?

Type Annotation nên được sử dụng khi:

  • Các bạn muốn tăng cường độ rõ ràng và dễ đọc của code.
  • Làm việc với các ứng dụng lớn, phức tạp và cần phải đảm bảo độ chính xác của loại dữ liệu.
  • Các bạn muốn ngăn chặn lỗi sai kiểu dữ liệu ngay từ ban đầu.

Khi nào sử dụng Type Inference?

Type Inference nên được sử dụng khi:

  • Các bạn làm việc với các đoạn code đơn giản và dễ hiểu.
  • Muốn giữ cho mã nguồn ngắn gọn và dễ quản lý.
  • Các bạn tự tin về những gì mà TypeScript sẽ suy luận cho các kiểu dữ liệu.

Kết luận

Qua bài học này, tôi hy vọng rằng các bạn đã hiểu rõ hơn về Type Annotation và Type Inference trong TypeScript. Kể từ bây giờ, hãy cân nhắc kỹ lưỡng khi nào nên dùng Type Annotation và khi nào nên để TypeScript tự suy luận kiểu dữ liệu để viết mã nguồn một cách hiệu quả và chính xác nhất.