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 (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.
Để 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}`; }
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 };
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 (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.
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
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 }
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 }
Type Annotation nên được sử dụng khi:
Type Inference nên được sử dụng khi:
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.