TypeScript 5.6: Type Inference Mạnh Hơn Và Performance Tốt Hơn

TypeScript 5.6: Type Inference Mạnh Hơn Và Performance Tốt Hơn

TypeScript 5.6: Type Inference Mạnh Hơn Và Performance Tốt Hơn

TypeScript code editor hiển thị type inference trong IDE

TypeScript tiếp tục phát triển mạnh mẽ với phiên bản 5.6, mang đến những cải tiến đáng kể về type inferenceperformance. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết các tính năng mới giúp lập trình viên viết code nhanh hơn, an toàn hơn và hiệu quả hơn.

Type Inference Được Cải Thiện Với BuiltinIteratorReturn

Một trong những điểm nhấn của TypeScript 5.6 là introduction của intrinsic type BuiltinIteratorReturn. Type mới này giải quyết vấn đề tồn đọng lâu nay liên quan đến IteratorResult khi TReturnany — kiểu mặc định.

Trước đây, khi gọi next() trên một iterator, TypeScript trả về value với kiểu string | any, thực chất trở thành any. Điều này khiến trình biên dịch mất khả năng kiểm tra an toàn kiểu. Với BuiltinIteratorReturn, TypeScript giờ đây mặc định TReturnundefined thay vì any, giúp type inference chính xác hơn:

function* uppercase(iter: Iterator<string, BuiltinIteratorReturn>) {
    while (true) {
        const { value, done } = iter.next();
        yield value.toUppercase();
        // Error! 'value' is possibly 'undefined'.
        if (done) {
            return;
        }
    }
}

Kết hợp với type IteratorObject mới (thay thế BuiltinIterator), TypeScript 5.6 cung cấp type inference tốt hơn cho các iterator từ Map, Set, Array và nhiều collection built-in khác. Flag --strictBuiltinIteratorReturn cho phép bật chế độ nghiêm ngặt này thông qua --strict.

Screenshot VS Code với diagnostics ưu tiên vùng

Performance Tăng Mạnh Với –noCheck Và Region-Prioritized Diagnostics

Performance là trọng tâm của TypeScript 5.6, đặc biệt trong hai khía cạnh:

1. Tùy chọn –noCheck

TypeScript 5.6 giới thiệu compiler option --noCheck, cho phép bỏ qua type checking hoàn toàn trong giai đoạn transpile. Điều này mang lại tăng hiệu suất đáng kể khi bạn cần tạo file JavaScript nhanh mà không cần kiểm tra kiểu:

tsc --noCheck    // Transpile nhanh, không type-check
tsc --noEmit    // Type-check thorough, không tạo output

Bạn có thể chạy hai tác vụ song song: --noCheck cho phát triển nhanh, --noEmit cho kiểm tra kỹ lưỡng. Internal trong TypeScript 5.5 đã tối ưu transpileModule với noCheck, và 5.6 đưa tính năng này ra API công khai, cho phép mọi build tool tận dụng chiến lược này.

2. Region-Prioritized Diagnostics

Trong các file lớn, việc chờ đợi diagnostics có thể rất frustrate — mất nhiều giây để lỗi biến mất sau khi sửa. TypeScript 5.6 giới thiệu region-prioritized diagnostics: thay vì kiểm tra toàn bộ file, ngôn ngữ server ưu tiên xử lý vùng đang nhìn thấy trên màn hình.

Trong benchmark trên checker.ts của chính TypeScript, full semantic diagnostics mất 3330ms. Với region-based, phản hồi đầu tiên chỉ mất 143ms — nhanh hơn gấp 23 lần!

Tính năng này hiện đã có sẵn trong Visual Studio Code cho TypeScript 5.6+, giúp editing cảm thấy mượt mà hơn rất nhiều trong dự án lớn.

Disallowed Nullish And Truthy Checks — Catching Bugs Thông Minh

TypeScript 5.6 không còn im lặng chấp nhận các biểu thức luôn truthy hoặc nullish. Trình biên dịch giờ đây sẽ error khi phát hiện:

if (/0x[0-9a-f]/) {
    // Error: This kind of expression is always truthy.
}

if (x => 0) {
    // Error: This kind of expression is always truthy.
    // (=> là arrow function, không phải >=)
}

Tính năng này giúp catch các bug tinh vi trước khi chạy code — đặc biệt hữu ích khi codebase lớn và nhiều thành viên cùng phát triển.

–noUncheckedSideEffectImports — An Toàn Hơn Khi Import

TypeScript 5.6 giới thiệu option --noUncheckedSideEffectImports. Trước đây, nếu import một side effect module mà không tìm thấy source file, TypeScript im lặng bỏ qua — dẫn đến lỗi khó phát hiện. Option mới đảm bảo TypeScript sẽ error khi không tìm thấy module, giúp phát hiện typo import nhanh chóng.

Cho Phép Build Với Lỗi Trung Gian

Trước 5.6, --build mode sẽ dừng ngay khi gặp lỗi ở dependency upstream, chặn hoàn toàn việc build downstream. TypeScript 5.6 thay đổi điều này: build tiếp tục thực hiện, tạo output files theo khả năng tốt nhất, và report lỗi một cách nhất quán. Tính năng này giúp quá trình nâng cấp dependency mượt mà hơn, không bị chặn bởi lỗi ở dự án khác.

Kết Luận

TypeScript 5.6 đánh dấu một bước tiến quan trọng. Cải thiện type inference với BuiltinIteratorReturn giúp kiểm soát kiểu chính xác hơn. Performance được boost mạnh nhờ –noCheck và region-prioritized diagnostics. Các tính năng như disallowed truthy checks và –noUncheckedSideEffectImports tăng cường độ an toàn cho codebase.

Nếu bạn đang sử dụng TypeScript trong dự án, hãy thử nghiệm các tính năng mới này. Bắt đầu với --strict để kích hoạt strictBuiltinIteratorReturn, và cân nhắc --noCheck cho các bước build nhanh trong development.

Để tìm hiểu thêm, truy cập hướng dẫn chính thức của TypeScript 5.6 hoặc đọc bài announcement trên DevBlog của Microsoft.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Các tính năng nổi bật Zig 0.13

Zig 0.13: Ngôn Ngữ Lập Trình Hệ Thống Thay Thế C/C++

Zig 0.13 là bản phát hành mới nhất của ngôn ngữ lập trình Zig, một ngôn ngữ hệ thống hiện đại được thiết kế để thay thế C và C++…

Xem thêm

Bun 1.1: JavaScript Runtime Hiệu Suất Cao Thay Thế Node.js

Bun là JavaScript runtime all-in-one, thay thế Node.js với hiệu suất vượt trội. Bun 1.1 (và phiên bản mới nhất 1.4.2) tích hợp luôn runtime, package manager, test runner, bundler…

Xem thêm

Next.js 14: Hướng Dẫn App Router Cho Developer Mới

Next.js 14 là framework React full-stack mạnh mẽ, và App Router là kiến trúc mới nhất giúp xây dựng ứng dụng web với hiệu suất vượt trội. App Router sử…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất