4 điểm bởi GN⁺ 2025-03-25 | 4 bình luận | Chia sẻ qua WhatsApp
  • TypeScript là ngôn ngữ bổ sung thông tin kiểu cho JavaScript
    • Thông tin kiểu sẽ bị loại bỏ trước khi được JS engine thực thi → tức là trong quá trình viết và phát hành cần thêm một bước xử lý
    • Bước bổ sung đó có đáng giá không? → Hoàn toàn đáng giá

Tự động hoàn thành và phát hiện lỗi khi chỉnh sửa mã

  • TypeScript cung cấp tự động hoàn thành và phát hiện lỗi khi viết mã
  • Ví dụ 1: lỗi gõ sai, sai kiểu, thiếu đối số
    • Hiển thị lỗi khi truy cập thuộc tính không tồn tại. Cũng sẽ không xuất hiện trong gợi ý tự động hoàn thành
    • Hiển thị lỗi khi gọi phương thức với kiểu không đúng
    • Hiển thị lỗi khi thiếu đối số bắt buộc
    • Hiển thị lỗi khi truyền đối số sai kiểu
  • Ví dụ 2: lỗi giá trị trả về của hàm
    • Hiển thị lỗi nếu giá trị trả về không khớp với kiểu đã định nghĩa
    • Ví dụ, nếu giá trị trả về là string[] nhưng kiểu trả về được định nghĩa là string thì sẽ phát sinh lỗi
  • Ví dụ 3: lỗi xử lý thuộc tính tùy chọn
    • Khi dùng thuộc tính tùy chọn làm giá trị trả về, nếu kiểu không khớp thì sẽ hiển thị lỗi
  • Ví dụ 4: thiếu case trong câu lệnh switch
    • Nếu không xử lý hết mọi case trong câu lệnh switch thì sẽ phát sinh lỗi
    • Nếu vi phạm yêu cầu rằng giá trị còn lại phải có kiểu never thì sẽ phát sinh lỗi
  • Ví dụ 5: lỗi xử lý một số trường hợp cụ thể trong mã
    • Khi phân nhánh theo một giá trị cụ thể, các trường hợp sai sẽ phát sinh lỗi
    • Ví dụ, nếu truy cập một thuộc tính không tồn tại trên một kiểu đối tượng cụ thể thì sẽ phát sinh lỗi

Khai báo tham số hàm và kiểu trả về → đóng vai trò tài liệu hóa tốt

  • TypeScript cho phép khai báo tham số của hàm và kiểu trả về
  • Cải thiện khả năng hiểu mã và khả năng bảo trì
  • Giúp thể hiện rõ kiểu của đối số và giá trị trả về của hàm

Tăng cường refactor mã

  • TypeScript giúp thực hiện refactor mã an toàn hơn
  • Khi đổi tên phương thức, thay đổi sẽ được phản ánh an toàn trên mọi đoạn mã liên quan
  • Có thể nắm bắt chính xác các mối liên kết trong mã

Việc dùng TypeScript ngày càng dễ hơn

  • Việc chạy và biên dịch TypeScript đã trở nên dễ hơn
  • Có thể chạy TypeScript trực tiếp trên các nền tảng như Node.js, Deno, Bun
  • Các bundler như Vite hỗ trợ TypeScript mặc định
  • Áp dụng kỹ thuật type stripping → chỉ loại bỏ thông tin kiểu mà không có biến đổi nào khác
  • Việc phát hành gói npm cũng được cải thiện → hỗ trợ tự động tạo JavaScript và file khai báo kiểu

Nhược điểm của TypeScript

  • Có đường cong học tập → phức tạp hơn JavaScript
  • Có thể phát sinh vấn đề nếu một số gói npm không có định nghĩa kiểu hoặc định nghĩa sai
  • Cấu hình tsconfig.json có thể phức tạp
    • Có thể giảm bớt vấn đề nếu cấu hình ở mức nghiêm ngặt tối đa
    • Khi việc loại bỏ kiểu trở nên rõ ràng hơn, vai trò của tsconfig.json cũng được đơn giản hóa

FAQ về TypeScript

Mã TypeScript có bị nặng nề không?

  • Nhờ suy luận kiểu, TypeScript cho phép viết mã chỉ với lượng định nghĩa kiểu tối thiểu
  • Vẫn có thể hoạt động hữu ích mà không cần chú thích kiểu phức tạp

TypeScript có đang cố biến JavaScript thành C# hoặc Java không?

  • Ban đầu, để bù đắp các tính năng còn thiếu của JavaScript, nó đã bổ sung các yếu tố như class, module, enum
  • Hiện nay, TypeScript đang được cải thiện để phù hợp với tiêu chuẩn ECMAScript
  • Các tính năng không có trong JavaScript sẽ không được thêm vào TypeScript

TypeScript có chỉ hỗ trợ lập trình hướng đối tượng (OOP) không?

  • TypeScript cũng hỗ trợ tốt các mẫu lập trình hàm
  • Ví dụ, discriminated union thường được dùng trong lập trình hàm

Có bắt buộc phải học các định nghĩa kiểu phức tạp không?

  • Trong phần lớn trường hợp, chỉ cần các định nghĩa kiểu đơn giản là đủ để dùng TypeScript
  • Các định nghĩa kiểu phức tạp hữu ích khi viết thư viện, nhưng không cần thiết trong sử dụng thông thường

Học TypeScript mất bao lâu?

  • Có thể học các khái niệm cơ bản chỉ trong một ngày
  • Sang ngày hôm sau đã có thể viết và debug mã đơn giản
  • Sau đó có thể học dần các kiểu phức tạp và tính năng nâng cao

Tài liệu nên đọc tiếp

4 bình luận

 
skrevolve 2025-03-26

Có lợi ích từ kiểu mạnh, C++ cũng vậy

 
slowandsnow 2025-03-25

Dùng JavaScript -> TypeScript thì cảm giác như đang nhắm mắt phát triển rồi bỗng mở mắt ra. Sự yên tâm mà kiểu dữ liệu mang lại, tự động hoàn thành và sự kết hợp với Copilot

 
bungker 2025-03-25

Các nhóm trong công ty chúng tôi từng nói chỉ cần JavaScript là đủ rồi và làm dự án như vậy, nhưng giờ đang đồng loạt chuyển hết sang TypeScript.

 
tsboard 2025-03-25

Điều này dường như là yếu tố thành công giúp TypeScript đánh bại Dart: nó không thay thế JavaScript mà bổ trợ cho nó. Tôi thực sự thấy thật may vì mình đã học nó.