TypeScript là superset của JavaScript có kiểu tĩnh, biên dịch ra JavaScript thuần.
function total(items: { price: number; qty: number }[]): number {
return items.reduce((sum, i) => sum + i.price * i.qty, 0)
}
total([{ price: 10, qty: '2' }])
// ~~~ Type 'string' is not assignable to type 'number'Cùng đoạn đó trong JavaScript chạy bình thường và trả về '0102' — một bug âm thầm chỉ lộ ra khi người dùng gặp.
Bốn lợi ích, xếp theo mức tác động thực tế:
1. Bắt lỗi lúc biên dịch — nhất là lỗi undefined/null và sai kiểu dữ liệu trả về từ API.
2. Hỗ trợ IDE — gợi ý chính xác, đổi tên an toàn xuyên codebase, nhảy tới định nghĩa.
3. Kiểu chính là tài liệu — signature của hàm nói rõ nó nhận gì, trả gì, không cần đọc thân hàm.
4. Refactor tự tin — đổi một kiểu, trình biên dịch chỉ ra mọi chỗ cần sửa.
Điểm quan trọng cần nói rõ khi phỏng vấn: kiểu trong TypeScript bị xoá hoàn toàn lúc biên dịch. Nó không kiểm tra gì khi chạy.
const data: User = await res.json() // KHÔNG có gì đảm bảo — chỉ là lời hứaDữ liệu từ API, localStorage, hay JSON.parse vẫn phải kiểm tra khi chạy — bằng Zod, Valibot hoặc type guard tự viết.
Khi nào chưa cần: script nhỏ, prototype dùng một lần. TypeScript phát huy tác dụng rõ nhất ở dự án nhiều người và codebase sống lâu.