10 điểm bởi GN⁺ 2025-05-25 | 3 bình luận | Chia sẻ qua WhatsApp
  • Bản xem trước tsgo của dự án Corsa, dự án port trình biên dịch TypeScript sang native dựa trên Go, đã được phát hành qua npm
  • Đây là thông báo tiếp theo liên quan đến TypeScript nhanh hơn gấp 10 lần, từng gây chú ý vào tháng 3
  • Đã đạt được mức cải thiện tốc độ hơn 10 lần so với tsc hiện tại, đồng thời hỗ trợ cả JSX và các tệp JavaScript dựa trên JSDoc
  • Tiện ích Native Preview cho VS Code cũng đã được phát hành, nhưng các tính năng như tự động hoàn thành, tìm tham chiếu vẫn đang được phát triển
  • API native mới và máy chủ ngôn ngữ dựa trên LSP cũng đang được chuẩn bị, cùng với việc đưa vào mô-đun Node nền tảng Rust là libsyncrpc
  • Một số tính năng vẫn chưa được triển khai, và tồn tại khác biệt rõ ràng giữa TypeScript 7 (Corsa) và 5.8 hiện tại (Strada)

Tổng quan về TypeScript Native Preview

  • Bản xem trước của dự án port TypeScript sang native (Corsa) được công bố vào tháng 3 năm 2025 nay đã được phát hành
  • So với codebase hiện tại dựa trên JS (Strada), tsgo được viết bằng Go cho thấy hiệu năng tăng hơn 10 lần trên các dự án lớn nhờ khả năng xử lý song song và tận dụng bộ nhớ dùng chung
  • tsgo dự kiến sẽ thay thế tsc trong tương lai, nhưng hiện tại được cung cấp dưới dạng gói npm riêng
    npm install -D @typescript/native-preview  
    npx tsgo --project ./src/tsconfig.json  
    

Tính năng tiện ích mở rộng VS Code

  • Phát hành tiện ích “TypeScript (Native Preview)” cho VS Code

  • Sau khi cài đặt, cần kích hoạt thông qua Command Palette hoặc phần cài đặt

    "typescript.experimental.useTsgo": true  
    
  • Hiện tại vẫn phụ thuộc vào tiện ích hiện có nên tính năng còn hạn chế, nhưng sẽ tiếp tục được cải thiện

Chu kỳ phát hành và lộ trình phát triển

  • Bản xem trước này dự kiến sẽ tiếp tục phát triển thành phiên bản chính thức TypeScript 7
  • Được phân phối dưới dạng bản dựng Nightly và tự động cập nhật
  • Một số tính năng hiện chưa được hỗ trợ:
    • --build, --declaration, emit cho target cấp thấp hơn
    • Tính năng trình soạn thảo: tự động hoàn thành, tìm tham chiếu, đổi tên...

Các cập nhật chính

Mức độ hoàn thiện của kiểm tra kiểu được cải thiện

  • Phần lớn các tính năng kiểm tra kiểu đã được port xong
  • Bắt đầu hỗ trợ kiểm tra kiểu cho JSX và JavaScript + JSDoc
  • Do một số thay đổi có chủ đích và khác biệt trong lib.d.ts, lỗi có thể xuất hiện khác nhau

Hỗ trợ kiểm tra kiểu cho JSX

  • Trước đây JSX chỉ mới phân tích cú pháp được, nhưng nay đã hỗ trợ kiểm tra kiểu đầy đủ
  • Ví dụ: với dự án Sentry, tsc mất 72 giây còn tsgo mất 6,7 giây, tức nhanh hơn hơn 10 lần
    tsgo -p . --noEmit --extendedDiagnostics  
    

Kiểm tra kiểu cho tệp JavaScript

  • Tính năng phân tích tệp JS dựa trên JSDoc cũng đã được tái triển khai bằng mã native
  • Được refactor theo cách hiện đại và nhất quán hơn so với trước đây
  • Một số mẫu cũ có thể sẽ không còn được nhận diện nữa

Tính năng trình soạn thảo (dựa trên LSP)

  • Đang được viết lại thành máy chủ ngôn ngữ dựa trên LSP thay cho TSServer hiện tại
  • Ở phiên bản đầu, cung cấp các tính năng hiển thị lỗi, đi tới định nghĩa, hover
  • Gần đây cũng đã bổ sung tính năng tự động hoàn thành (completion)

Tình hình phát triển API

  • Đang triển khai lớp API dựa trên IPC
  • Cho phép nhiều ngôn ngữ khác nhau giao tiếp với tiến trình TypeScript
  • Để hỗ trợ giao tiếp đồng bộ trên Node.js, đã đưa vào mô-đun nền tảng Rust libsyncrpc
  • Thiết kế API hiện vẫn ở giai đoạn đầu và đang tiếp nhận phản hồi

Điểm khác biệt so với TypeScript hiện tại

  • Do khác biệt về một số thiết lập, có thể phát sinh lỗi trong các dự án hiện có:

    • Ví dụ: --moduleResolution: node → khuyến nghị dùng bundler hoặc nodenext
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • Các khác biệt khác:

    • JSX emit chỉ có thể giữ nguyên
    • Chưa hỗ trợ declaration emit
    • Chưa hỗ trợ --build
    • Dịch vụ ngôn ngữ liên quan đến project reference vẫn chưa hoàn thiện

Kế hoạch sắp tới

  • Mục tiêu là hoàn thiện --build và phần lớn các tính năng cốt lõi của trình soạn thảo trước cuối năm nay
  • Tiến độ phát triển sẽ tiếp tục được cập nhật qua blog và các bản phát hành nightly

3 bình luận

 
riki3 2025-05-25

Tôi đang tự build trực tiếp LSP để dùng. Đổi sang Go nên cảm nhận rất rõ là tài nguyên tiêu thụ đã giảm đi.

 
cnaa97 2025-05-25

Dạo này cứ chuyển js sang rust / go là thành trào lưu để tăng hiệu năng

 
click 2025-05-25

Khi refactor, khá nhiều lần việc phân tích mã ở phía tsserver bị chậm khiến cả editor bị treo cứng, nên mong là nó sẽ sớm ra mắt để được giải thoát khỏi nỗi khổ này.