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

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 inference và performance. 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 TReturn là any — 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 TReturn là undefined 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.

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.
