Tài nguyên học TypeScript
TypeScript có rất nhiều tài nguyên hữu ích cho việc học tập và nghiên cứu, bao gồm cả cuốn sách này và những tài nguyên được cung cấp bởi Microsoft - công ty phát triển TypeScript.
Trang này giới thiệu các nguồn thông tin về TypeScript mà bạn có thể sử dụng sau khi đọc cuốn sách này hoặc ngay cả trong quá trình đọc. Nửa sau của trang này sẽ giải thích phương pháp chinh phục tài liệu chính thức - tài liệu rất quan trọng trong học tập và phát triển - bao gồm cấu trúc và cách đọc.
Việc đọc hết và thành thạo tất cả các tài nguyên được giới thiệu trong trang này là khó khăn và không hiệu quả, vì vậy chúng tôi khuyến nghị bạn nên ý thức về vai trò và mức độ của từng nguồn thông tin, chọn lọc và đọc một phần, hoặc sử dụng phân biệt theo mục đích.
Giới thiệu tài nguyên
Nguồn thông tin chính thức từ Microsoft
Giới thiệu các nguồn thông tin chính thức được Microsoft cung cấp.
| Tài nguyên | Đặc điểm |
|---|---|
| TypeScript Documentation | Tài liệu chính thức của TypeScript. Là nguồn thông tin quan trọng nhất, là reference cần thiết khi học tập và phát triển. Nửa sau của trang này sẽ giải thích chi tiết nội dung và phương pháp chinh phục. |
| Microsoft Developer Blogs | Các bài viết về TypeScript trên blog nhà phát triển của Microsoft. Bạn có thể biết thông tin mới nhất về TypeScript như thông báo phiên bản mới. |
| FAQ | Bộ câu hỏi thường gặp về TypeScript được tổng hợp trên wiki của repository phát triển. Cung cấp các câu hỏi và câu trả lời loại Why/What/How/Should về hành vi và thực hành. |
Trong số các nguồn thông tin từ chính thức, quan trọng nhất là tài liệu chính thức, nhưng các hành vi và khái niệm chi tiết không được ghi trong tài liệu chính thức cần phải tham khảo một số nguồn thông tin trong repository phát triển.
| Tài nguyên | Đặc điểm |
|---|---|
| Roadmap | Lộ trình các tính năng sẽ được thêm vào TypeScript trong tương lai. Danh sách các pull request của các tính năng được giới thiệu trong mỗi phiên bản đã phát hành, trong đó có mô tả chi tiết về khái niệm và tính năng từ nhà phát triển ngôn ngữ. |
| docs/spec-ARCHIVED.md | Đặc tả cũ của TypeScript, ghi chép một số hành vi và khái niệm chi tiết không có trong tài liệu chính thức. Hiện tại đã bị xóa khỏi nhánh main nên cần lưu ý. |
| compiler/checker.ts | File source code implement type checker. TypeScript hiện tại không có đặc tả được cập nhật, và đây là tài liệu duy nhất ghi chép hành vi kiểm tra kiểu dưới dạng comment. |
Nguồn thông tin từ bên thứ ba
Giới thiệu một số tài nguyên học tập phổ biến từ bên thứ ba.
| Tài nguyên | Đặc điểm |
|---|---|
| roadmap.sh | Phiên bản TypeScript của trang "roadmap.sh" tổng hợp những gì developer cần học dưới dạng lộ trình. Trang này cho phép bạn có cái nhìn tổng quan về ngôn ngữ TypeScript và lộ trình học tập dưới dạng roadmap. |
| TypeScript Deep Dive | Sách giải thích open source được công bố trực tuyến. Tuy ngắn gọn nhưng bạn có thể biết nội dung nâng cao về TypeScript. Phiên bản gốc bằng tiếng Anh, nhưng có bản dịch tiếng Nhật bởi tình nguyện viên. |
| Programming TypeScript ―Phát triển ứng dụng JavaScript có khả năng scale | Sách nhập môn TypeScript xuất bản bởi O'Reilly Japan. Giải thích từ những điều cơ bản như type safety là gì, type checker là gì, kiểu là gì, giúp bạn hiểu hệ thống kiểu của TypeScript từ đầu. |
| TypeScript nhập môn cho người muốn trở thành Pro - Từ cách viết code an toàn đến sử dụng kiểu nâng cao | Sách nhập môn TypeScript xuất bản bởi Gijutsu-Hyohron. Được gọi là "sách Blueberry", không chỉ giải thích về TypeScript mà còn cả JavaScript. |
| Playlist: TypeScript nhập môn dễ hiểu nhất Nhật Bản | Series video giải thích TypeScript được cung cấp bởi Torazemi trên Youtube. Bạn có thể học cơ bản TypeScript qua video dễ hiểu. |
Tài nguyên học JavaScript
Việc học TypeScript không thể thiếu việc học JavaScript. Ở đây giới thiệu một số tài nguyên học JavaScript nổi tiếng. Thực tế, trong quá trình học TypeScript sẽ có nhiều trường hợp muốn biết thêm về JavaScript, vì vậy khi cần thiết hãy tham khảo các tài liệu này.
| Tài nguyên | Đặc điểm |
|---|---|
| MDN Web Docs | Tài liệu trên Web ghi chép syntax và tính năng của JavaScript, được viết dưới dạng open source bởi Mozilla. Không chỉ JavaScript mà còn bao phủ toàn diện các công nghệ liên quan đến Web như HTML, CSS, WebAPI, hoạt động như reference trong nhiều tình huống. |
| JavaScript Primer - Sách nhập môn không lạc đường | Tài liệu trên Web cho phép học JavaScript từ đầu dựa trên các tính năng ES2015 trở đi. Cũng được xuất bản dưới dạng sách để dễ đọc, bạn có thể mua từ Amazon hoặc Tatsujin Shuppankai. |
Giống như cuốn sách này, cả hai đều có nội dung được quản lý trên GitHub, nên có thể đóng góp bằng cách tạo pull request hoặc issue.
Chinh phục tài liệu chính thức
Tài liệu chính thức của TypeScript được viết bằng tiếng Anh và có lượng lớn, nên bạn có thể ngại bắt đầu.
Tuy nhiên, để tiến triển trong học tập và phát triển TypeScript, việc đọc tài liệu chính thức là cần thiết để biết thông tin chính xác và chi tiết về từng tính năng, vì vậy mục này sẽ giới thiệu phương pháp chinh phục tài liệu chính thức, tập trung vào handbook là phần cốt lõi, bao gồm cấu trúc và cách đọc.
Tài liệu chính thức sẽ thường xuyên hữu ích ngay cả sau khi đọc xong cuốn sách này, vì vậy hãy làm chủ cách đọc và kết bạn với tài liệu chính thức.
Thành phần
Trước tiên hãy nắm bắt các thành phần của tài liệu chính thức. Tài liệu chính thức của TypeScript được cấu thành từ nhiều section như sau.
| Section | Nội dung |
|---|---|
| Get Started | Section giới thiệu dựa trên background và skill của người học. |
| Handbook | Handbook là hướng dẫn toàn diện về tính năng và hành vi ngôn ngữ. Được cấu trúc để có thể đọc trong vài giờ về tính năng và hành vi của TypeScript trong các use case hàng ngày. |
| Reference | Section reference về các chủ đề ứng dụng không được cover trong handbook. Bao gồm các chủ đề như utility type, namespace, type compatibility. |
| Tutorial | Tutorial để giới thiệu và sử dụng TypeScript trong một số môi trường tiêu biểu. |
| Declaration Files | Tài liệu giải thích về file định nghĩa kiểu (.d.ts). Section này hữu ích khi tạo file định nghĩa kiểu cho việc phân phối package. |
| JavaScript | Ghi chép thông tin cần thiết để nhận lợi ích từ các công cụ TypeScript trong project sử dụng JavaScript. |
| Project Configuration | Tài liệu về cấu hình project. Giải thích về cách cấu hình tsconfig. Section này hữu ích khi muốn biết thông tin chi tiết về compiler option. |
| Cheat Sheets | Cheat sheet tổng hợp syntax dễ hiểu dưới dạng hình ảnh. Hữu ích khi muốn có cái nhìn tổng quan về syntax TypeScript. |
| What's new | Trang giới thiệu tính năng được thêm trong mỗi phiên bản. Trong trang của phiên bản mới, pull request thực tế thêm tính năng đó được liên kết, nên nếu muốn biết mô tả chi tiết hơn về hành vi, bạn có thể truy cập link đó để đọc giải thích của nhà phát triển. |
Khi nói đến tài liệu chính thức thường chỉ handbook, nhưng trên trang web chính thức của TypeScript có trang "TypeScript Documentation", và nhóm tài liệu được tổng hợp trong trang này bao gồm cả cheat sheet là tài liệu chính thức.
Tuy nhiên, không cần thiết phải đọc hết tất cả section một lần từ đầu đến cuối. Có những phần người mới học nên đọc kỹ và phương pháp để đọc hiệu quả.
Phương châm chinh phục cơ bản
Phương châm chinh phục tài liệu chính thức là "thay đổi cách đọc tài liệu chính thức tùy theo mức độ và tình huống học tập". Phương pháp này cho phép bạn đọc hiệu quả tài liệu chính thức có lượng lớn.
Cụ thể, phương pháp sau đây là phù hợp và được khuyến nghị.
- (A) Nắm bắt cấu trúc và đặc điểm của tài liệu chính thức
- (B) Đọc introduction trong "Get Started"
- (C) Đọc handbook từ đầu
- (D) Đọc reference khi cần kiến thức chi tiết
- (E) Đọc thông tin gốc trong repository phát triển TypeScript
- (X) Có cái nhìn tổng quan về syntax bằng cheat sheet
Về cơ bản, bạn có thể dần mở rộng kiến thức bằng cách thực hiện các phương pháp từ (A) đến (E) theo thứ tự thời gian.
(A) được hoàn thành bằng cách đọc trang này, nhưng đặc biệt khi xem tài liệu chính thức như một tài nguyên học tập, "Get Started" và handbook rất quan trọng, là những phần người mới học nên đọc kỹ. Hai phần này nên dành thời gian đọc kỹ, còn reference thì đọc khi cần hoặc khi rảnh rỗi sẽ hiệu quả.
Ngoài ra, có một số tính năng không được giải thích đầy đủ trong tài liệu chính thức. Khi muốn biết hành vi chi tiết hơn, bạn có thể biết hành vi chi tiết bằng cách đọc mô tả của pull request implement tính năng đó từ repository là codebase của TypeScript. Bạn có thể biết phiên bản TypeScript mà tính năng được giới thiệu từ trang "What's new" hoặc "Roadmap" trong repository phát triển, từ đó truy cập pull request để có thông tin chi tiết.
(X) Cheat sheet tổng hợp syntax TypeScript một cách toàn diện và dễ hiểu, nhìn vào đó bạn có thể có cái nhìn tổng quan về kiến thức cần thiết, nên hãy xem khi bạn quan tâm.
Phương châm cơ bản để chinh phục tài liệu chính thức như trên, tiếp theo sẽ giải thích về handbook là phần cốt lõi.
Phiên bản handbook
TypeScript đã có hơn 10 năm lịch sử kể từ khi phát hành lần đầu năm 2012. Trong thời gian đó, nó đã tiếp tục được update và tiến hóa về mặt tính năng, và tài liệu chính thức cũng tiến hóa cùng với update ngôn ngữ.
📄️ Bối cảnh ra đời của TypeScript
TypeScript là ngôn ngữ lập trình được phát triển với mục đích giúp phát triển ứng dụng lớn bằng JavaScript dễ dàng hơn.
Tài liệu chính thức có nhiều section, trong đó section "handbook" rất quan trọng. Handbook là hướng dẫn toàn diện về ngôn ngữ TypeScript, cung cấp walkthrough để người học có được sự hiểu biết vững chắc về tính năng và hành vi TypeScript được sử dụng hàng ngày.
Và một sự tiến hóa đáng chú ý của tài liệu chính thức là việc công bố phiên bản handbook mới gọi là "v2" vào năm 2021. Handbook trước v2 được gọi là "v1", hiện đã được deprecated và có thể xem từ repository đã archive.
Vì việc công bố v2 handbook khá gần đây, nhiều sách nhập môn phổ biến và tài nguyên trên Web trước đó phản ánh nội dung v1, cần lưu ý điều này.
Đặc điểm của handbook
V2 handbook được mô tả trong bài viết trên blog nhà phát triển "Announcing the New TypeScript Handbook" là được viết với các ràng buộc sau.
- Để việc giải thích JavaScript cho chuyên gia (Leave teaching JavaScript to the experts)
- Dạy incremental (Teach incrementally)
- Để compiler nói (Let the compiler do the talking)
- Viết cho các case hàng ngày (Write for the everyday cases)
Đặc điểm nổi bật là handbook không giải thích từ đầu về kiến thức JavaScript mà để cho các sách và tài nguyên Web khác, làm cho nội dung ngắn gọn. Một trong những mục đích của handbook là để engineer hiểu TypeScript - là superset về mặt ngôn ngữ - được xây dựng trên JavaScript như thế nào, nên câu chuyện tiến triển với giả định người đọc có mức độ kiến thức và background về JavaScript.
Tuy nhiên, như sẽ nói sau, handbook chuẩn bị section "Get Started" bên ngoài cho người đọc có nhiều mức độ skill khác nhau, và người mới học bao gồm người đã học ngôn ngữ khác được khuyến nghị đọc từ trang trong section này.
Sử dụng kết hợp với Survival TypeScript
Như đã nói ở trên, handbook không có giải thích về tính năng hay syntax có sẵn trong JavaScript. Tuy nhiên, từ thực tế rằng hiểu JavaScript là không thể thiếu cho hiểu TypeScript, nội dung của cuốn sách này rất hữu ích khi muốn học JavaScript song song với TypeScript.
📄️ JavaScript là một phần của TypeScript
Cú pháp TypeScript là phần mở rộng của cú pháp JavaScript. Cú pháp được mở rộng trong TypeScript chủ yếu liên quan đến kiểu. Hầu hết các cú pháp khác đều bắt nguồn từ JavaScript. Do đó, JavaScript thuần cũng có thể được xử lý như TypeScript. Ví dụ, code dưới đây là 100% JavaScript, nhưng TypeScript compiler có thể phân tích và thực hiện kiểm tra tĩnh.
Nếu đọc cuốn sách này và có tính năng bạn quan tâm hoặc muốn đào sâu, hãy tìm trong toàn bộ tài liệu chính thức bao gồm handbook. Nếu không giỏi tiếng Anh, hãy đọc kỹ trang của cuốn sách này để hiểu nội dung, sau đó đọc trang tài liệu chính thức tương ứng. Cuốn sách này ghi chép nhiều từ tiếng Anh gốc bao gồm trang sau, sử dụng những từ đó để tìm kiếm trong tài liệu chính thức sẽ dễ dàng tìm được phần bạn muốn đọc.
📄️ Chỉ mục: Ký hiệu và từ khóa
Trong code JavaScript và TypeScript có sử dụng các ký hiệu như ?. và từ khóa như as. Các ký hiệu và từ khóa như vậy rất khó tìm kiếm trên Google, việc tra cứu ý nghĩa của chúng không hề dễ dàng.
Ngoài ra, tương tự như cuốn sách này, handbook không cover tất cả edge case hay tính năng quá đặc biệt, mà ý thức về các case hàng ngày. Và những thứ vượt ra ngoài phạm vi đó được ghi trong trang của section reference.
Ngược lại, điểm khác biệt giữa cuốn sách này và tài liệu chính thức là cuốn sách này được làm với ý thức về thực tế hơn. Chương 3 "Học TypeScript qua thực hành" - implement các ứng dụng khác nhau thực tế, Chương 5 "Tips" - giới thiệu kỹ thuật coding, và các thực hành được giải thích ở nhiều nơi sẽ hữu ích trong công việc thực tế. Vì vậy, bạn có thể học hiệu quả bằng cách sử dụng phân biệt cả tài liệu chính thức và cuốn sách này tùy theo mục đích và tình huống.
Kết hợp cuốn sách này và tài liệu chính thức là tốt cho TypeScript, nhưng khi muốn biết sâu hơn về tính năng hay syntax JavaScript, hãy kết hợp MDN Web Docs, và khi muốn biết cả specification, hãy tham khảo specification ECMAScript.
- TypeScript → Tài liệu chính thức
- JavaScript → MDN Web Docs
- ECMAScript → ecma262
Ngôn ngữ TypeScript bao gồm nhiều layer như "hệ thống kiểu + runtime + language specification" tồn tại riêng biệt, nhiều ngôn ngữ, specification, API, nên khi điều tra hành vi hoặc vấn đề cần tham khảo tài liệu của từng layer. Thời điểm tham khảo tài liệu chính thức TypeScript là khi muốn biết về tính năng hoặc cấu hình TypeScript, tức là tính năng liên quan đến kiểu (type annotation, type inference, type operator...) hoặc compiler option.
Hãy ý thức về thông tin gì bạn muốn biết, và khi muốn biết JavaScript syntax hoặc ECMAScript specification thì đọc tài liệu ghi chép điều đó.
Đọc introduction
Có mục nên đọc trước khi bắt đầu handbook là section "Get Started" - introduction. Trang trong section này chuẩn bị 5 tài liệu sau để người đọc đa dạng với nhiều mức độ skill và background khác nhau có thể biết nhanh đặc điểm của TypeScript.
| Trang | Nội dung |
|---|---|
| TypeScript for New Programmers | Introduction cho người mới lập trình chọn TypeScript làm ngôn ngữ đầu tiên. |
| TypeScript for JavaScript Programmers | Introduction cho programmer có kinh nghiệm JavaScript. |
| TypeScript for Java/C# Programmers | Introduction cho programmer có kinh nghiệm OOP (lập trình hướng đối tượng) như Java hoặc C#. |
| TypeScript for Functional Programmers | Introduction cho programmer có kinh nghiệm FP (lập trình hàm) như Haskell hoặc ML. |
| TypeScript Tooling in 5 minutes | Trang giải thích đơn giản từ cài đặt TypeScript đến xây dựng web application đơn giản. Phù hợp với người đọc muốn sử dụng TypeScript ngay lập tức. |
Hãy chọn và đọc trang introduction phù hợp với skill và background của bạn. Dưới đây giới thiệu nội dung trang mà người ở mỗi mức độ skill nên đọc, nhưng mỗi trang trong "Get Started" có kiến thức và cách suy nghĩ quan trọng chỉ được ghi ở đó, nên nếu có thời gian hãy xem qua các trang khác.
🧑💻 Người mới lập trình
Nếu TypeScript là ngôn ngữ lập trình đầu tiên của bạn, đọc trang "TypeScript for New Programmers" sẽ giúp bạn có hướng dẫn về cách học từ nay.
Nội dung bao gồm giải thích đơn giản về lịch sử JavaScript và mối quan hệ giữa JavaScript và TypeScript.
Từ ràng buộc viết handbook "Để việc giải thích JavaScript cho chuyên gia", về cơ bản không có giải thích về tính năng hay syntax JavaScript, nên trang này giới thiệu tài nguyên học JavaScript và kết thúc với "Hãy học JavaScript để học TypeScript", khuyến khích học JavaScript.
🧙 Người học có kinh nghiệm JavaScript
Nếu bạn có kiến thức và kinh nghiệm JavaScript, khuyến nghị đọc từ trang "TypeScript for JavaScript Programmers". Trang này rất hữu ích, cho phép biết nhanh về các tính năng và khái niệm quan trọng chiếm vị trí trung tâm của TypeScript như sau.
- Type inference
- Type definition
- Type composition (union type và generics)
- Structural type system
Đọc trang này bạn có thể nắm được các khái niệm quan trọng trong TypeScript, nên trong handbook bạn chỉ cần mở rộng thêm những kiến thức đó.
👨🚀 Người học có kinh nghiệm lập trình hướng đối tượng
Người học có kinh nghiệm OOP (lập trình hướng đối tượng) như Java hoặc C# có thể học về sự khác biệt trong cách suy nghĩ về class và hướng đối tượng trong TypeScript bằng cách đọc trang "TypeScript for Java/C# Programmers".
So với Java hoặc C# áp dụng nominal typing (định kiểu theo tên), TypeScript áp dụng structural subtyping (định kiểu cấu trúc), nên có những ý tưởng quan trọng được trình bày về sự khác biệt và cách suy nghĩ về kiểu cần biết.
📄️ Structural typing
Đối với ngôn ngữ lập trình, hệ thống kiểu là một chủ đề quan trọng. Hệ thống kiểu là tập hợp các quy tắc gán "kiểu" cho các giá trị và biến khác nhau trong chương trình. Những quy tắc này quyết định tính chất và cách xử lý dữ liệu. Đặc biệt, cách phân biệt giữa các kiểu và ngược lại, cách xác định tính tương thích giữa các kiểu là chủ đề liên quan trực tiếp đến tính dễ sử dụng và an toàn của ngôn ngữ.
🦸♂️ Người học có kinh nghiệm lập trình hàm
Người học có kinh nghiệm FP (lập trình hàm) như Haskell hoặc ML có thể biết về TypeScript trong khi học về các tính năng tương tự và khác biệt với các ngôn ngữ hàm đó bằng cách đọc trang "TypeScript for Functional Programmers".
Nội dung là giải thích về điểm khác và điểm giống với hệ thống kiểu Haskell. Cụ thể có giải thích về cách xử lý trong TypeScript những thứ như unit type, point-free programming, higher-kinded types.
Cách đọc handbook
Handbook có cấu trúc section như sau.
| Trang | Nội dung |
|---|---|
| The TypeScript Handbook | Giải thích về cấu trúc và mục đích của handbook |
| The Basics | Giải thích về cách suy nghĩ cơ bản trong TypeScript |
| Everyday Types | Giải thích về mọi kiểu được sử dụng hàng ngày |
| Narrowing | Giải thích về narrowing kiểu |
| More on Functions | Giải thích chi tiết về kiểu hàm |
| Object Types | Giải thích chi tiết về kiểu object |
| Type Manipulation | Section chứa các trang giải thích về phương pháp tạo kiểu mới từ kiểu. |
| Classes | Giải thích về access modifier và cách type annotation cho class |
| Modules | Giải thích về module resolution |
"Type Manipulation" là section chứa các trang giải thích về phương pháp tạo kiểu mới từ kiểu sử dụng generics và type operator. Section này có cấu trúc trang như sau.
| Trang | Nội dung |
|---|---|
| Creating Types from Types | Giải thích về phương pháp tạo kiểu từ kiểu khác |
| Generics | Giải thích về generics nhận kiểu làm parameter |
| Keyof Type Operator | Giải thích về phương pháp tạo kiểu mới sử dụng type operator keyof |
| Typeof Type Operator | Giải thích về phương pháp tạo kiểu mới sử dụng type operator typeof |
| Indexed Access Types | Giải thích về phương pháp truy cập subset của kiểu sử dụng syntax Type['a'] |
| Conditional Types | Giải thích về conditional type hoạt động như statement trong hệ thống kiểu |
| Mapped Types | Giải thích về phương pháp tạo kiểu bằng cách mapping property của kiểu hiện có |
| Template Literal Types | Giải thích về Mapped type thay đổi property qua template literal string |
Từ ràng buộc viết "Dạy incremental", handbook được cấu trúc để có thể đọc tuyến tính từ đầu đến cuối, tránh đề cập đến tính năng chưa được giải thích và tích lũy kiến thức dần dần. Vì vậy, phương châm cơ bản về cách đọc là đọc tuần tự từ đầu.
Nếu bạn hoàn toàn không biết gì về TypeScript, sau khi đọc trang introduction trong "Get Started", chỉ cần đọc "The Basics" và "Everyday Types" ở đầu là bạn có thể nắm được tổng quan về TypeScript.
Mỗi kiến thức được module hóa thành trang, nên cách đọc bỏ qua nội dung bạn đã biết từ cuốn sách này và chỉ đọc trang bạn muốn biết khi cần cũng hiệu quả. Cách đọc như vậy đặc biệt hiệu quả cho section reference. Ví dụ, trang giới thiệu utility type trong reference dựa trên kiến thức về type operator được giải thích chi tiết trong section "Type Manipulation" của handbook.
Hơn nữa, cuốn sách này module hóa kiến thức chi tiết hơn tài liệu chính thức, nên ngược lại, cách đọc sử dụng cuốn sách này khi muốn đọc giải thích dễ hiểu bằng tiếng Việt trong khi đọc tài liệu chính thức cũng hiệu quả.