Typescript là gì? Ngôn ngữ kịch bản kế thừa từ Javascript

2352
10-07-2021
Typescript là gì? Ngôn ngữ kịch bản kế thừa từ Javascript

Typescript có lẽ vẫn còn là một khái niệm mới ít phổ biến ngay cả trong lĩnh vực công nghệ thông tin, nhất là với những ai không chuyên lập trình. Một ngôn ngữ kịch bản dựa trên JavaScript nhưng lại hỗ trợ tốt cho hướng đối tượng, được tạo ra bởi Microsoft nhưng lại cấp giấy phép nguồn mở,… Còn điều gì thú vị đằng sau ngôn ngữ này nữa? hãy cùng Bizfly Cloudđi tìm câu trả lời trong bài viết hôm nay.

TypeScript là gì?

Tên như ý nghĩa, TypeScript là một ngôn ngữ kịch bản (script) mã nguồn mở do Microsoft phát triển, kế thừa từ nền tảng của JavaScript và bổ sung khả năng làm việc với các kiểu dữ liệu tĩnh (static type).

TypeScript có thể sử dụng để phát triển các ứng dụng chạy ở cả client-side (Angular2) và server-side (NodeJS). TypeScript sử dụng tất cả các tính năng của của ECMAScript 2015 (ES6) như classes, modules. Trước khi TypeScript ra đời, cũng có một số thư viện như CoffeScript và Dart được phát triển bởi Google hỗ trợ những concept trên nhưng chúng lại sử dụng cú pháp mới hoàn toàn. Do đó, tuy ra đời sau nhưng TypeScript vẫn đang nhận được sự phản hồi tích cực từ các lập trình viên.

TypeScript giúp phát triển ứng dụng chạy ở Client- Side

TypeScript giúp phát triển ứng dụng chạy ở Client- Side

Vì sao nên sử dụng TypeScript

Dễ phát triển dự án lớn

Trong một thời gian dài, các lập trình viên đã luôn gặp khó khăn khi muốn làm việc với hướng đối tượng hay thậm chí là khái niệm căn bản về kiểu dữ liệu trong JavaScript. Rất nhiều lỗi compile time không thể phát hiện tự động như gán dữ liệu sai kiểu hay việc tạo class khó khăn khiến lập trình viên không muốn sử dụng JavaScript quá nhiều.

TypeScirpt ra đời và khắc phục những nhược điểm trên bằng cách áp dụng các kỹ thuật mới nhất của ES6 cũng như khả năng làm việc với kiểu dữ liệu tĩnh. Giờ đây các biến được kiểm soát kiểu dữ liệu chặt chẽ, lỗi kiểu cũng có thể được code editor chỉ ra ngay trong quá trình viết mã giúp việc phát triển các dự án lớn dễ dàng hơn.

Nhiều lựa chọn Framework

Hiện nay các JavaScript Framework đã dần khuyến khích nên sử dụng TypeScript để phát triển vì những đặc tính ưu việt, ví dụ như AngularJS 2.0 và Ionic 2.0.

Mã nguồn mở

Ngay cả Microsoft từng tuyên bố "Linux là một căn bệnh ung thư" giờ đây cũng đã cởi mở hơn với mã nguồn mở, dẫn đến sự ra đời của TypeScript. Có thể thấy những lợi ích của nguồn mở là không cần bàn cãi: miễn phí, an toàn, linh hoạt và có cộng đồng hỗ trợ nhiệt tình.

Tương thích tốt với JavaScript

Bản chất của TypeScript là biên dịch tạo ra các đoạn mã JavaScript nhờ các trình biên dịch như Babel nên bạn có thể chạy bất kì ở đâu miễn là môi trường có hỗ trợ JavaScript. 

Trong quá trình biên dịch các khai báo kiểu được kiểm tra và nếu không phát hiện lỗi, chúng sẽ được loại bỏ để trở thành JavaScript quen thuộc. Điều này cũng có nghĩa là bạn có thể sử dụng trộn lẫn cú pháp của JavaScript vào bên trong TypeScript, giúp việc tiếp cận TypeScript dễ dàng hơn.

Chức năng của TypeScript

Static Typing

Một trong những tính năng đáng giá nhất của TypeScript là kiểu dữ liệu tĩnh - static type. Dĩ nhiên nếu đã quen với cú pháp JavaScript thông thường thì bạn có thể bỏ qua bước khai báo kiểu này và để compiler tự xác định, nhưng có thể chắc chắn rằng phần lớn lập trình viên đã mong chờ khả năng khai báo kiểu này khi làm việc lần đầu với JavaScript, nhất là khi đã từng sử dụng các ngôn ngữ lập trình như C/Java,… Khả năng khai báo kiểu giúp kiểm soát các biến tốt hơn và đồng thời phát hiện sớm, giảm thiểu lỗi trong quá trình biên dịch/runtime.

Ví dụ, với JavaScript trước đây ta có thể khai báo một biến và gán bất kỳ kiểu dữ liệu nào cho nó. Trong TypeScript, do đã định kiểu trước nên kiểu dữ liệu của giá trị gán vào cùng kiểu với biến, nếu gán sai sẽ có lỗi và không thể biên dịch:

typescript là gì - Ảnh 1.

Script Result // Biến Age dùng để lưu số tuổi // của nhân viên trong TypeScript var age:Number = 15 //OK console.log(age) var age:Number = "fifteen" //Lỗi console.log(age)

TypeScript hỗ trợ 7 kiểu dữ liệu cơ bản bao gồm: boolean, number, string, array, enum, any, void

Interfaces

Interface hay giao diện là một khái niệm quen thuộc trong hướng đối tượng, nó quy định cấu trúc bắt buộc (thuộc tính, phương thức, sự kiện) mà mọi thực thể (object) triển khai (implement) interface đó phải tuân thủ chặt chẽ. Interfaces trong TypeScript cũng dựa trên tinh thần đó, sử dụng static types để khai báo các thành phần và ràng buộc kiểu, nhưng chỉ dừng lại ở khai báo mà không implement.

Lấy ví dụ về Interface IPerson

interface IPerson {

fullName: string; //fullName phải là kiểu string

gender: boolean; //gender phải là kiểu boolean

sayHi: () => string; //method này trả về kiểu string

}

Khi implement interface IPerson, object phải implement đầy đủ các thuộc tính (fullname, gender), phương thức (sayHi) và tuân thủ ràng buộc kiểu đã đặt ra. Object cũng có thể bổ sung tùy ý các thành phần riêng mà interface không quy định. Khai báo như sau là hợp lệ:

var customer: IPerson = {

fullName: "Tom Riddle", //gán đúng kiểu string

gender: true, //gán đúng kiểu boolean

age: "twenty", //thuộc tính riêng, không ràng buộc kiểu

sayHi: (): string => {

return "Hi there"; //trả đúng kiểu string

},

};

Classes

Classes cũng là khái niệm cốt lõi khác trong hướng đối tượng, sử dụng để quy định cấu trúc của một lớp các đối tượng. Classes trong TypeScript là tính năng có từ phiên bản ECMAScript 2015 (ES6), nó có tương đối đầy đủ các tính năng của classes trong các ngôn ngữ lập trình thuần hướng đối tượng như constructor, inheritance, abstract classes, interface implementations,…

Modules

Khả năng phân rã thành modules là rất quan trọng trong các dự án cần tái sử dụng mã nguồn và khả năng mở rộng về sau. Module hóa cũng giúp tổ chức mã nguồn khoa học hơn và dễ đọc, dễ bảo trì. TypeScript cho phép export các class, interfaces, functions,… thành một module để sử dụng ở nơi khác và import các module có sẵn để tận dụng code.

Có 2 kiểu module chính là Internal Module (sử dụng trong cùng file js) và External Module (sử dụng module từ nhiều file JS khác nhau). Do JS truyền thống quản lý file dựa trên cặp thẻ , trình duyệt nạp từng file (và các module trong đó) một cách tuyến tính, khiến không có cách nào chạy bất đồng bộ các module này.

TypeScript xử lý vấn đề bằng cách sử dụng các thư viện RequireJS cho client side và Nodejs cho server side để liên kết các file JS và sử dụng bất đồng bộ các module.

Generics

Generics là một kỹ thuật lập trình tiên tiến, khi người ta tách kiểu dữ liệu ra khỏi logic xử lý và cấu trúc dữ liệu. Với Generics code chỉ cần viết một lần và kiểu dữ liệu có thể được quy định ở compile time, giúp nâng cao khả năng tái sử dụng. Generics trong TypeScript gần tương tự C#, không chỉ dùng cho hàm mà còn cả Classes và Interfaces.

function getArray(items : T[] ) : T[] {

return new Array().concat(items);

} //Trả về mảng có kiểu bất kỳ được truyền vào

let myNumArr = getArray([100, 200, 300]);

let myStrArr = getArray(["Hello", "World"]);

myNumArr.push(400); // OK

myStrArr.push("Hello TypeScript"); // OK

myNumArr.push("Hi"); // Compiler Error

myStrArr.push(500); // Compiler Error

Ưu, nhược điểm khi dùng TypeScript

Để có thể hiểu hơn về TypeScript, bạn đọc có thể tham khảo những ưu điểm và nhược điểm dưới đây:

Ưu điểm

Thuận tiện và hoàn toàn miễn phí

Đối với ngôn ngữ lập trình tĩnh như TypeScript, ta có thể lấy tất cả số liệu và thông số của người dùng dễ dàng hơn nhờ có IDE và trình biên dịch. TypeScript có khả năng hỗ trợ tìm kiếm, giúp rút ngắn thời gian kiểm tra lại code, không cần thông qua người dùng khác để tìm thông tin dữ liệu. Đồng thời giảm thiểu phần trăm va chạm lỗi trong quá trình vận hành. Đây là một trong những phần mềm nổi trội được Microsoft hỗ trợ hoàn toàn miễn phí.

Thao tác nhanh chóng, đơn giản

Khi sử dụng ngôn ngữ thông thường, người dùng sẽ phải khởi động lại hàm, tạo đối số và hoàn thành đoạn mã. Sau khi áp dụng các đoạn mã và công cụ cần thiết, thì bắt đầu vận hành. Trong quá trình vận hành, nếu phát hiện có lỗi thì tiến hành sửa chữa lại. Trong khi đó TypeScript có thao tác khá đơn giản, dễ đọc, giúp tiết kiệm thời gian, khắc phục tình trạng gặp lỗi.

Tái cấu trúc

Trong quá trình viết code, lập trình viên sẽ thường xuyên mắc phải các lỗi nhỏ và cần chỉnh sửa. Việc sử dụng TypeScript sẽ giúp cho thao tác chỉnh sửa code trở nên dễ dàng hơn, nhờ có lệnh Rename Symbol/Find All Occurrences. Ngược lại đối với các ngôn ngữ khác, khi cần sửa đoạn code nào đó thì sẽ phải thay đổi cả những tập tin liên quan khác hoặc sử dụng RegEx.

Trong trường hợp người dùng TypeScript muốn nâng cấp hệ thống (thêm/xóa thuộc tính, đổi tên,…), TypeScript giúp thiết lập lại cấu trúc sao cho phù hợp với nhu cầu tìm kiếm, mà không làm xáo trộn hệ thống. Trong trường hợp code của người dùng không tương thích với bất cứ dữ liệu nào thì sẽ hệ thống sẽ thông báo lại ngay.

Giảm thiểu tỷ lệ mắc lỗi trong hệ thống

Với tính năng cảnh báo lỗi trong quá trình viết code, tỷ lệ mắc lỗi khi sử dụng TypeScript khá thấp. Đồng thời, TypeScript sẽ trả lại giá trị null hoặc gợi ý chỉnh sửa phù hợp. Từ đó giúp người dùng tiết kiệm được không ít thời gian sửa lỗi.

Giảm thiểu các bước thử nghiệm

Với quy trình kiểm tra và báo lỗi tự động, khi các biến dữ liệu đã nằm đúng chỗ, người dùng sẽ không cần phải kiểm tra lại mà vẫn đảm bảo hệ thống vận hành trơn tru, hiệu quả. Nhờ đó mà người dùng sẽ có nhiều thời gian hơn cho việc kiểm tra chất lượng logic của hệ thống, tối ưu hiệu quả công việc.

Hợp nhất mã đơn giản

Có thể sau khi hoàn thiện một đoạn code và cho chạy thử nghiệm, mọi thứ đều hoạt động tốt trong môi trường đó. Tuy nhiên, bạn có chắc chắn rằng đoạn code đó cũng sẽ hoạt động trơn tru trong môi trường khác? Với TypeScript, người dùng có thể dễ dàng hợp nhất mã để kiểm tra đánh giá đoạn mã vừa được tạo trước đó bằng Typedef (kiểm tra biên dịch).

Nhược điểm

Cần trình biên dịch riêng

Để vận hành tệp TypeScript với đuôi .js trên nền tảng Node.js, người dùng bắt buộc phải sử dụng trình biên dịch.

Thiết lập khó khăn

Trước khi sử dụng TypeScript, cần đảm bảo rằng máy chủ Node.js, trình thử nghiệm cũng như webpack có thể hoạt động được với TypeScript để có thể vận hành. Ngoài ra, mỗi khi người dùng áp dụng thêm library như Redux, React hay Styled-Component thì sẽ phải bổ sung cả Typedef.

Vẫn là phiên bản mở rộng của JavaScript

Nhìn chung, chức năng chính của TypeScript là để biên dịch về JavaScript. Nó không phải là ngôn ngữ có khả năng vận hành độc lập và thay thế cho JavaScript. Chức năng của TypeScript bị giới hạn bởi chức năng của JavaScript, được nâng cấp lên từ các điểm yếu của JavaScript.

Nếu chỉ sử dụng mỗi TypeScript, người dùng sẽ không thể hoàn thiện được tất cả các công đoạn của dự án. TypeScript chỉ thực sự hữu ích khi được kết hợp và tối ưu cùng với các nền tảng, ngôn ngữ và công cụ khác.

Hướng dẫn cài đặt TypeScript

Nếu bạn đã có cái nhìn tổng quan về TypeScript và muốn bắt đầu ngay, sau đây là hướng dẫn cài đặt TypeScript. Nhìn chung nếu đã làm việc với node package manager và các framework JS thì mọi thứ khá đơn giản.

Bước đầu tiên bạn cần cài đặt Node.js và một dependency manager như npm. Trong npm bạn gõ lệnh sau

npm install -g typescript

typescript là gì - Ảnh 4.

Sau đó để kiểm tra cài đặt thành công, mở cửa sổ Terminal và nhập lệnh

tsc –version

typescript là gì - Ảnh 5.

Nếu cài đặt thành công, bạn sẽ nhìn thấy dòng thông tin về phiên bản của TypeScript.

Hi vọng bài viết này của chúng tôi đã giúp các bạn có thêm kiến thức về TypeScript – một ngôn ngữ kịch bản hỗ trợ rất tốt cho lập trình hướng đối tượng. Chúc các bạn khởi đầu thuận lợi với ngôn ngữ mới này và hãy luôn theo dõi Bizfly Cloud để cập nhật những công nghệ mới nhất cùng chúng tôi.

Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.

Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.

Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.

DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud

SHARE