Obiz Solutions

TypeScript là gì?

TypeScript là JavaScript có thêm hệ thống kiểu (type system). Nó là một superset của JavaScript — mọi code JS hợp lệ đều là code TypeScript hợp lệ — nhưng cho phép khai báo kiểu dữ liệu để trình biên dịch bắt lỗi trước khi chạy, thay vì để lỗi rơi vào runtime. Site này (và các component .astro) đều viết bằng TypeScript.

Vấn đề nó giải quyết

JavaScript thuần không kiểm tra kiểu dữ liệu, nên các lỗi như gọi nhầm field, truyền sai kiểu tham số, quên xử lý null… chỉ lộ ra khi chạy thực tế (hoặc tệ hơn, khi đã lên production). TypeScript bắt phần lớn các lỗi này ngay lúc viết code, trong editor.

Cú pháp cơ bản

// Khai báo kiểu cho biến, tham số, giá trị trả về
function greet(name: string): string {
  return `Hello, ${name}`;
}

// Interface / type mô tả hình dạng object
interface Post {
  title: string;
  pubDate: Date;
  tags: string[];
}

// Union type — giá trị có thể là một trong nhiều kiểu
type Locale = "en" | "vi";

Type inference

Không phải lúc nào cũng cần khai báo kiểu tường minh — TypeScript tự suy ra kiểu dựa vào giá trị gán:

const count = 3; // TypeScript tự hiểu đây là number

Vì sao dùng trong site này

  • Content Collections của Astro dùng schema Zod để validate frontmatter Markdown, và tự sinh ra type cho post.data.title, post.data.pubDate… — gõ nhầm field sẽ báo lỗi ngay lúc build, không phải khi site đã deploy.
  • Các hàm dùng chung như src/lib/content.ts khai báo kiểu rõ ràng (Locale, CollectionEntry<"blog">…), giúp autocomplete chính xác khi viết component mới.
  • Chạy npm run build sẽ luôn astro check trước — nếu có lỗi type, build sẽ dừng lại thay vì âm thầm deploy code lỗi.

Khi nào TypeScript đáng giá

Với project nhỏ, một file thì JS thuần cũng ổn. Nhưng khi code lớn dần, có nhiều người cùng sửa, hoặc dữ liệu đi qua nhiều lớp (Markdown → component → render), type system giúp tránh rất nhiều lỗi vặt mà lẽ ra phải phát hiện bằng cách chạy thử thủ công.

Tài liệu tham khảo

Tài liệu chính thức: typescriptlang.org/docs