Khám Phá TypeScript và Khái Niệm 'Type Erasure'
Trong bài viết này, chúng ta sẽ tìm hiểu về TypeScript, một ngôn ngữ lập trình phổ biến trong phát triển ứng dụng web, cùng với khái niệm quan trọng có tên là 'Type Erasure'. Để nắm bắt những khái niệm này, việc hiểu một số định nghĩa nền tảng là rất cần thiết.
Ngôn Ngữ Lập Trình: Bậc Cao và Bậc Thấp
Trước hết, chúng ta cần phân biệt giữa hai loại ngôn ngữ lập trình: ngôn ngữ bậc cao và ngôn ngữ bậc thấp.
- Ngôn ngữ bậc cao: Như JavaScript, ngôn ngữ bậc cao thường dễ hiểu và dễ sử dụng hơn với con người nhờ vào tính trừu tượng hóa cao.
- Ngôn ngữ bậc thấp: Ví dụ như mã máy hoặc Assembly, yêu cầu lập trình viên phải làm việc gần gũi với phần cứng, dẫn đến việc phát triển phần mềm trở nên phức tạp hơn.
Khái Niệm Biên Dịch và Chuyển Đổi Mã Nguồn
1. Biên Dịch (Compiling)
Biên dịch là quá trình chuyển đổi mã nguồn thành mã máy mà máy tính có thể thực thi. Quá trình này có thể trải qua nhiều giai đoạn, với mỗi giai đoạn tối ưu hóa mã để đưa nó gần hơn với mã máy. Một số ngôn ngữ điển hình được biên dịch bao gồm Java, C#, và C.
2. Chuyển Đổi (Transpiling)
Chuyển đổi mã nguồn hay còn gọi là 'transpiling' là quá trình chuyển đổi giữa các ngôn ngữ bậc cao khác nhau. Ví dụ, TypeScript là một ngôn ngữ bậc cao, và sau khi được chuyển đổi, nó sẽ trở thành JavaScript. Tương tự, công cụ Babel cho phép chuyển đổi mã JavaScript từ phiên bản ES6 sang ES5. Một trong những lợi ích của 'transpiling' là bạn có thể viết mã bằng một ngôn ngữ bậc cao nhưng vẫn có thể chạy trên một ngôn ngữ bậc cao khác.
Tìm Hiểu Về 'Type Erasure' Trong TypeScript
'Type Erasure' hay 'xóa kiểu dữ liệu' là một khái niệm quan trọng trong quy trình chuyển đổi mã của TypeScript. Nói một cách đơn giản, 'type erasure' là quá trình loại bỏ tất cả các kiểu dữ liệu khỏi mã TypeScript khi mã được biên dịch sang JavaScript. Điều này có nghĩa là kiểu dữ liệu bạn đã sử dụng sẽ không được kiểm tra trong thời gian chạy mã JavaScript.
Ví dụ, đoạn mã TypeScript dưới đây:
typescript
let name: string = 'Kealan';
sẽ được chuyển đổi thành:
javascript
let name = 'Kealan';
Dù có sự khác biệt tùy thuộc vào cách xây dựng cụ thể, nhưng ví dụ về 'type erasure' vẫn rất rõ ràng. Điều này không chỉ đúng với các kiểu dữ liệu nguyên thủy như number
hay string
mà còn với các kiểu dữ liệu tùy chỉnh mà bạn tạo ra.
typescript
type StringType = string;
const firstName: StringType = 'Kealan';
Biết rõ về 'type erasure' không chỉ giúp bạn hiểu hơn về bản chất của TypeScript mà còn giải thích một bước quan trọng trong quy trình chuyển đổi mã nguồn, nơi các kiểu dữ liệu bị loại bỏ và không được sử dụng trong mã JavaScript mà chúng ta tạo ra. Điều này cũng có nghĩa là một số phần mã của bạn có thể không được sử dụng trong mã JavaScript sau giai đoạn chuyển đổi, giúp giảm kích thước mã cần gửi tới người dùng.
Bạn có thể thấy rõ điều này trong TypeScript Playground, nơi các interface được sử dụng trong mã TypeScript sẽ không xuất hiện trong mã JavaScript đã chuyển đổi.
Kết Luận
Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về TypeScript và sự khác biệt giữa biên dịch và chuyển đổi mã nguồn. Bằng cách nắm bắt những khái niệm cơ bản này, bạn sẽ có nền tảng tốt hơn để phát triển ứng dụng với TypeScript.
source: viblo