Typescript là gì? Có ăn được không?

TypeScript có ăn được không? Câu trả lời là có nhưng mà hơi khó nhai vì Typescript là ngôn ngữ chặt chẽ về kiểu dữ liệu.

Có rất nhiều người tỏ ý chế giễu khi nhắc đến Typescript khi họ nghĩ rằng nó chỉ là 1 framework, thư viện với một ít code trong đó. Một số người còn không thèm đếm xỉa đến nó và tránh dùng nó vì nghĩ nó chỉ là một thứ gì đó mới ko quan trọng bằng hàng ngàn thứ cần học ngoài kia.

Tuy nhiên, Typescript là một trong những món quà quý nhất mà Microsoft tặng miễn phí, opensource và được nhiệt liệt đón nhận bởi cộng đồng lập trình. Team Angular rất thích điều này và họ xây dựng CLI generators sử dụng Typescript là chủ yếu.

Ủa vậy tại sao Typescript lại tuyệt vời đến vậy??

Typescript làm cho Javascript trở nên mạnh hơn

Nếu chúng ta quay ngược về những năm 90 khi mà mọi thứ đều còn mới mẻ. Javascript đã bước vào khung cảnh như một hiệu ứng huyền ảo, hoàn hảo cho trang web. Và chỉ sau vài thập kỷ, bây giờ nó đã trở thành một ngôn ngữ backend với RESTful APIs, mobile app lẫn frontend vốn có.

Mặc dù ECMA đang từng bước phát triển qua từng năm tháng. Nhưng vẫn còn khá nhiều khiếm khuyết mà Javascript cần phải khắc phục và học hỏi từ các ngôn ngữ lập trình khác như Java và C#.

Với Typescript, nó giúp cho nhà phát triển Javascript có khả năng định nghĩa chặt chẽ kiểu dữ liệu của họ và tăng cường “sức đề kháng” cho mã nguồn. Việc này có thể giúp hạn chế lỗi liên quan tới việc sai, nhầm lẫn kiểu dữ liệu. Giúp giảm thời gian debug lỗi và tăng chất lượng của dự án.

Tại sao chúng lại lại cần kiểu dữ liệu trong Javascript?

Trên mặt nổi, Typescript giống hệt như Javascript với sự bổ sung của kiểu dữ liệu. Lợi ích của việc này là để phòng tránh việc sử dụng sai hay nhầm lẫn kiểu dữ liệu. Tránh các việc khai báo, ép kiểu vô tội vạ. Nó cung cấp cho ngôn ngữ lỏng lẻo này một phương thức chặt chẽ hơn trong lập trình.

Với Typescript, một đoạn code mẫu trông như thế này:

let cat: string = "Merlin";
let age: number = 3;
function increaseAge( age: number ){ 
     return age + 1; 
}

Đoạn code trên trông có vẻ không đặc biệt lắm, những nếu bạn thử gọi hàm increaseAge(cat), Typescipt sẽ báo lỗi. Bởi vì hàm này chỉ chấp nhận một biến đầu vào kiểu số chứ không phải kiểu chuỗi. Tuy nhiên nếu chạy với Javascript trong cùng ngữ cảnh trên, nó sẽ trả về kết quả Merlin1 mà không thông báo bất kỳ lỗi nào. Kết quả này sẽ dẫn tới những lỗi kế tiếp mà sẽ làm mất thời gian của chúng ta để truy ngược lại nguyên nhân.

Đoạn code trên hoạt động không khác gì Javascript. Ngoại trừ một ít “gia vị” để phòng tránh lỗi trước khi nó có thể xảy ra.

Tương thích chéo

Web chạy nhanh như chó chạy ngoài đồng, vì thế không phải lúc nào chúng ta cũng có thể bắt kịp nó. Typescript xử lý việc này bằng cách cho phép chúng ta chọn phiên bản Javascript mà chúng ta cần build. Vì vậy, với nhiều môi trường khác nhau, các bạn chỉ cần lập trình với Typescript sau đó build ra mã nguồn Javascipr với phiên bản ES thích hợp.

Mục đích của Typescript là để bọc cho Javascript. Biên dịch nó ra vanilla Javascript và xử lý những thiếu sót tính năng của nó. Mặc dù Javascript tương thích ngược, tuy nhiên khi bạn sử dụng những tính năng mới trên trình duyệt chạy trên Javascript phiên bản cũ, nó thường gây lỗi cho chương trình. Typescript tự động phát hiện output cần thiết để build ra trên môi trường của bạn. Việc này sẽ giúp bạn tiết kiệm khối thời gian để lập trình thay vì phải đau đầu về việc xử lý tương thích giữa các thiết bị, trình duyệt hay môi trường.

Chuẩn hóa code trong team

Khi bạn không còn bị ràng buộc bởi phiên bản của Javascript nữa, bạn sẽ tự do lập trình. Mã của bạn trở nên linh hoạt hơn theo thời gian. Bạn có thể triển khai các tính năng và chức năng theo cách gắn kết và mô đun hóa nhất mà không cần phải cấu trúc lại mỗi khi cập nhật JavaScript hoặc khi trình duyệt và môi trường thay đổi.

Team của bạn chỉ cần thành thạo các mô hình lập trình. Triển khai chúng trong TypeScript chứ không phải xử lý các vấn đề tương thích chéo và nâng cấp phiên bản. Điều này cũng cho phép nhóm của bạn thu hẹp khoảng cách giữa tính năng và năng suất. Tránh các phát sinh từ các thay đổi của các phiên bản JavaScript trong lập trình và môi trường khởi tạo.

Phát triển phần mềm mạnh mẽ trên các frameworks và thư viện

Trong khoảng thời gian phát triển Angular 2, nhóm thực sự tìm cách tạo ra một “siêu” JavaScript để giải quyết vấn đề về khoảng cách giữa tính năng và khả năng tương thích. TypeScript thể hiện mình là một ứng cử viên và mối quan hệ đối tác dù rất khó có thể xảy ra giữa Google và Microsoft. Tuy vậy thật sự đã xảy ra trong thế giới nguồn mở.

Ngoài khả năng kiểu dữ liệu tùy biến, TypeScript còn cung cấp quyền truy cập vào ES7 và ES8 trong khi các trình duyệt chính vẫn chưa bắt kịp. Các tính năng của năm 2018 như Object.fromEntries không được hỗ trợ trong Chrome 72 và tất cả các trình duyệt Edge. Năm 2019, JSON.opesify vẫn chưa được đưa vào Node. Phải được đưa vào cùng với ràng buộc tùy chọn trong các phiên bản Node 8.10 trở lên.

Nhưng làm thế nào Typescript có thể tham gia vào cuộc chơi lớn của React và Node?

Chúng ta đều biết rằng Angular quảng bá TypeScript nhiều như chính nó được quảng bá. Bạn có thể thực sự đi sâu vào Angular mà không cần chạm vào TypeScript. Nhưng về React và Node? React đã sử dụng JSX và Node, bạn chỉ có thể viết nó bằng JavaScript thuần.

Điều đặc biệt với TypeScript là nó không thay đổi cách bạn viết mã. Nó chỉ thêm cấu trúc bổ sung cho nó. Vì vậy, mã React của bạn vẫn có thể trông giống như mã React nhưng có thêm các kiểu dữ liệu.

Khi bạn chuyển đổi mã JavaScript thành TypeScript. Mã của bạn sẽ vẫn chạy vì chưa có kiểu dữ liệu nào được đính kèm. Tuy nhiên, nếu các kiểu được khai báo, đó là khi bạn sẽ bắt đầu thấy vẻ đẹp và sự khéo léo của TypeScript trong quá trình gỡ lỗi của bạn.

TypeScript nằm trên tất cả mọi thứ khác. Nó không can thiệp vào hoạt động và cấu trúc của mã JavaScript, thư viện hoặc mã vanilla của bạn.

Kết luận

Nếu bạn là người mới đối với JavaScript, bạn không nên chế giễu TypeScript ngay từ cái nhìn đầu tiên. TypeScript không được thiết kế và tạo ra chỉ để lôi kéo các nhà phát triển Frontend. Nhưng thay vào đó, nó cung cấp cho mọi người một công cụ cho phép tạo ra những mã nguồn mạnh mẽ . Nó kế thừa đặc điểm từ các ngôn ngữ khác.

JavaScript được tạo ra để có thể di động và dễ dàng. Nhưng theo thời gian, chúng ta đã thấy ngôn ngữ phát triển vượt ra ngoài ý định ban đầu. Mặc dù một vài trăm, hay hàng ngàn dòng code, vẫn có thể duy trì ổn định trong JavaScript vanilla. Tất cả chúng ta đều biết rằng điều đó sẽ dần dần không còn đúng nữa. JavaScript đã bùng nổ và đang chạy ở mọi nơi và trên hầu hết mọi thiết bị. Số lượng dòng code đã tăng theo cấp số nhân. Và chúng ta cần một cách để quản lý và duy trì nó mà không cần ngốn quá nhiều thời gian tronng cuộc sống.

Học TypeScript không khó. Nó viết và chạy như JavaScript. Chỉ với một vài công cụ và thủ thuật để giúp bạn viết mã tốt hơn. Trên thực tế, bạn có thể viết code TypeScript như JavaScript và nó vẫn sẽ biên dịch. Typescript giúp cuộc sống của chúng ta dễ thở hơn và giúp cho việc lập trình trở nên ngọt ngào hơn nhiều ^^


Cảm ơn các bạn đã đọc hết bài.

>