Tại sao tôi chuyển sang Typescript?

Bạn có thể thấy blog của tôi tập trung khá nhiều vào Typescript thông qua những bài viết gần đây. Một vài người hỏi tôi, tại sao tôi lại chọn Typescript và làm việc với Typescript nhiều như vậy? và tại sao Typescript là thứ tôi quan tâm hằng ngày? Tôi sẽ giải thích thông qua các lần mà tôi “chạm chán” với Typescript.

1. Khoảng tháng 11 năm 2015 – Seminar nội bộ của backend team

Sau này thì mình có tìm hiểu, Typescript được công bố vào tháng 10 năm 2012, nhưng mãi tới năm 2015 thình mình mới bắt gặp TS “lần đầu”, dù mình đã làm việc với Javascript từ năm 2013.

Seminar của một anh trong team, nói về các tính năng của TS. Mình tham gia và có ghi lại được một vài “từ khóa”, mình có thể thấy những lợi ích của TS mang lại nhưng vẫn còn nhiều hoài nghi. Đặc biệt sau đó mình có thấy một vài đồng nghiệp sử dụng TS, đa số họ đều là những backend developer, họ có suy nghĩ của một backend developer, và họ thường chuyển từ các ngôn ngữ C# hoặc Java sang. Đó là lý do họ thử với TS, nó có những thứ kiểu như “abstract classes” hay “interface” và “factories”, “static classes”…haizzz! Họ thực hiện hóa OOP với Javascript bằng TS 😐 (Lúc này tôi đa số dùng Javascript ở phía client, jQuery các thứ, mình có làm backend, nhưng mình dùng ASP.NET 😀 )

Tất cả những thứ đó không phải là Javascript! Và mình vẫn thích Javascript “thuần”.

Vậy nên, mình đã “loại bỏ” hoàn toàn Typescript. Cho tới khi…

2. Tháng 6 năm 2017 – Dự án bắt buộc dùng Typescript

Hiện tại thì mình đã là một backend dev, và đã từng tham gia xây dựng nhiều dịch vụ bằng Javascript chạy trên nền Nodejs.

Từ ghi Google phát hành Framework Angular 2 (khoảng năm 2015 gì đấy :-?), thì Framework đã giúp Typescript trở nên phổ biến hơn rất nhiều, đã có rất nhiều người biết tới TS thông qua Angular 2. Có thể đó là một lý do, mình được tham gia vào một dự án sẽ được viết bằng Typescript (cho phía backend :D).

Tôi ngay lập tức phải làm quen với việc viết Javascript “strongly typed” – Typescript. Mình đã đọc khá nhiều ví dụ về việc chuyển code từ Javascript sang Typescript, lúc đầu nó khá khó hiểu và phải làm rất nhiều thứ, và đã có rất nhiều chỗ mình sử dụng cú pháp as any. Mình gần như đã bị lạc đường và “bỏ cuộc”, mình đã viết ứng dụng với Typescript theo phong cách Javascript 🙂

Thực sự thì hiểu biết của mình về Typescript thực sự ở mức khá thấp. Nhưng cũng là lý do để mình thay đổi suy nghĩ về Typescript.

3. Tháng 8 năm 2017 – Dự án phát hành version 1.0

Sau khi dự án phát hành phiên bản đầu tiên – v1.0.0, mình có một chút thời gian, đây là lúc mình nghiêm túc tìm hiểu về Typescript.

Khi làm việc tới Typescript, mình nhận thấy rằng mình có thể viết Javascript như những gì mình đã từng làm. Không có báo lỗi từ trình biên dịch TS, không có gì phiền cả, mọi thứ rất ổn 😐

Nhưng có một thứ đã làm mình thay đổi hoàn toàn: IDE (VSCode) gần như đọc và phân tích Typescript của mình một các liên tục. Và nó có thể cung cấp những thông tuyệt vời khi mình tiếp tục viết code, thông tin về kiểu dữ liệu, params, input… hiện lên một cách cực kỳ rõ ràng mà mình không phải làm gì cả. IDE hỗ trợ cực tốt khi mình viết code theo “chuẩn” Typescript.

Cho tới giờ, có một sự thật là, nếu bạn sử dụng VSCode để viết Javascript, rất có thể bạn đang sử dụng Typescript mà bạn không biết.

document.getElementsByClassName('box');

Hãy thử Ctrl + Click (⌘ + Click) vào phương thức getElementsByClassName, bạn sẽ được dẫn tới một trang tài liệu được viết bằng Typescript.

Với VSCode, có một tiến trình biên dịch Typescript luôn được chạy ngầm, tiến trình này nhằm hỗ trợ khi bạn viết code với Typescript hoặc Javascript. Điều này giúp cho bạn có một trải nghiệm tốt hơn mà bạn không cần phải làm gì cả.

Typescript trở thành một thứ gì đó mà nó biết rõ về code của mình còn hơn cả chính mình 😀

Mình nhận thấy mục tiêu thiết kế của Typescript bao gồm:

  • Bạn có thể áp dụng các tính năng của Typescript bất cứ khi nào bạn cảm thấy cần.
  • Bám sát các tiêu chuẩn của ECMAScript. Bạn không chờ tới khi các tính năng mới của Javascript được phát hành trong những bản ES mới nhất, Typescript sẽ áp dụng các tính năng đó khi nó đang ở stage 3.
  • Typescript muốn đưa ra những cách tốt hơn để thể hiện code Javascript của bạn.
  • Typescript không hạn chế bạn bằng việc phải xác định kiểu cho dữ liệu. Typescript cung cấp cho bạn cách và công cụ để làm việc hiệu quả hơn.

Mình cũng đã xem lại một video trên Youtube, video giới thiệu Typescript vào năm 2012 – Anders Heijlsberg & Luke Hoban: Introducing TypeScript . Tác giả bài thuyết trình đã mô tả các mục tiêu thiết kế của Typescript – Nó sẽ thay đổi rất nhiều cách chúng ta viết các ứng dụng Javascript. Trở thành một “ngôn ngữ” tầng trên của Javascript là mục tiêu của Typescript.

Typescript là … Javascript. Javascript với những tính năng mà nó có, giờ có thêm những tính năng mà Typescript mang lại.

Cách tiếp cận của mình:

  1. Viết code Javascript, sẽ cảm thấy vui khi định nghĩa được một “cái gì đó” không phải là any.
  2. Nếu bạn vẫn đang làm việc với Javascript, hãy thêm chú thích cho kiểu của tham số, biến khi có thể:
    /**
     * Repeats a given string a certain number of times.
     *
     * @param {string} text - Text to repeat
     * @param {number} count - Number of times
     * @returns {Array<string>} Result
     */
    
    function repeat(text, count) {
      return Array(count + 1).join(text)
    }

    Khi bạn gọi tới hàm repeat, IDE sẽ cho bạn những thông tin chi tiết về hàm đó.

  3. Khi sử dụng Typescript, không cần để ý tới các tính năng mới sẽ được áp dụng vào Javascript, vì TS sẽ áp dụng các tính năng đó khi nó đang ở stage 3 (Quên babel hay những thứ tương tự đi).

Nếu bạn cũng đi theo lộ trình như vậy, bạn sẽ nhanh chóng thích và thích nghi với Typescript. Và đó cũng là lý do mình sử dụng Typescript rất nhiều và luôn muốn dùng Typescript.

Nó đã giúp mình, đồng nghiệp của mình, và nó cũng có thể giúp bạn làm việc hiệu quả hơn.