Bỏ qua để vào nội dung chính
TypeScript vs JavaScript khi AI viết code: 6 run, 1 bug

TypeScript vs JavaScript khi AI viết code: 6 run, 1 bug

Bởi Ava Mitchell
08 thg 11, 20264 phút đọc

Thí nghiệm cho Claude Opus 5.5 viết Git clone 3 lần mỗi ngôn ngữ: TypeScript 0 bug, JavaScript 1 bug, chi phí chênh 7%. Khác biệt chưa đủ kết luận.

Thí nghiệm 6 lần cho Claude Opus 5.5 viết cùng một Git clone: TypeScript để lại 0 bug, JavaScript 1 bug. Chính tác giả nói con số đó không phân biệt được với may rủi.

Câu "để AI viết code thì TypeScript an toàn hơn" được lặp lại nhiều đến mức ít ai kiểm chứng. Một developer đã dựng thí nghiệm có kiểm soát ở quy mô vài nghìn dòng để đo.

Thiết kế thí nghiệm

AI được giao viết tgit — CLI tương thích Git, output phải khớp Git gốc từng ký tự. Tác giả chọn Git vì đáp án là tuyệt đối: chạy cùng thao tác trên Git thật rồi so sánh là chấm được bằng máy.

Spec giao ba đợt, cộng dồn 82 → 117 → 151 hidden test, cộng 2.000 chuỗi thao tác ngẫu nhiên mỗi version — so cả exit code, output, nội dung .git và xem git fsck --strict có chấp nhận repository không.

Điều kiện chỉ khác đúng ngôn ngữ: TS bật strict và noUncheckedIndexedAccess, cấm any, pass tsc mới tính xong; JS không type check. AGENTS.md giống nhau từng chữ trừ vài dòng đó. AI là Claude Opus 5.5 trong Claude Code, context giới hạn 200K.

Kết quả: gần như không phân biệt được

Năm trên sáu run đạt điểm tuyệt đối ở hidden test. Run rớt duy nhất là BN03 (JavaScript): 81/82, 116/117, 150/151.

Bug duy nhất sống sót: khi add file bị .gitignore loại, Git thật báo lỗi và không ghi gì; BN03 trả đúng exit code nhưng đã kịp ghi một .git/index rỗng trước khi fail. Tác giả nói thẳng đây không phải loại bug type checker bắt được — nó là chuyện thứ tự, viết y hệt trong TypeScript vẫn được.

Chi phí: TS đắt hơn 7%, lý do nằm ở cache

Chi phí ước tính 49,9 USD cho TypeScript và 46,7 USD cho JavaScript. Nghịch lý: JS sinh nhiều output token hơn (1,02M so với 1,00M) nhưng vẫn rẻ hơn.

Vì phần lớn tiền nằm ở input — output chỉ chiếm khoảng một phần ba chi phí. Cache read của TS cao hơn khoảng 9,3M token, riêng khoản đó đã khoảng 3 USD: agent đọc lại toàn bộ hội thoại từ cache mỗi lượt, mà code TS dài hơn khoảng 20% (4.985 dòng so với 4.153) nên mỗi lần đọc/ghi file lại nhét thêm vào hội thoại. Tổng token 67,7M so với 58,2M (TS +16%), nhưng khoảng dao động ba run hai bên vẫn chồng lên nhau.

JS chạy test gấp đôi

Nhánh TS chạy tsc 40–55 lần mỗi run nhưng chỉ 2–3 lần thực sự báo lỗi; cả ba run cộng lại AI chỉ gặp 8 lỗi type, một nửa thuộc loại "tên không tồn tại" — chạy một lần là lộ.

Ngược lại JS chạy npm test 28–36 lần mỗi run so với 13–19 lần của TS — chỉ số duy nhất mà khoảng dao động hai bên không chồng lên nhau. Đem code JS cuối soi lại bằng checkJs thì ra 832–1.022 lỗi type mỗi run, trung bình 925 — thủng lỗ chỗ dưới lăng kính type, nhưng điểm test vẫn gần tuyệt đối.

Đọc kết quả này thế nào

Giải thích của tác giả: AI tự kiểm chứng được với Git thật, trung bình hơn 120 kịch bản so sánh mỗi run, nên lỗi type checker lẽ ra bắt thì test đã bắt trước.

Đó cũng là giới hạn khi áp vào dự án của bạn: thí nghiệm có oracle hoàn hảo để đối chiếu, đa số dự án thật thì không — mất oracle thì nguồn tín hiệu JS dùng thay type checker cũng yếu đi. Với ba run mỗi bên, hãy coi đây là bằng chứng chống lại niềm tin "TS chắc chắn an toàn hơn cho AI", không phải cho chiều ngược lại.

Đáng theo dõi là giả thuyết tác giả bỏ ngỏ: dynamic typing có thể đuối dần khi codebase lớn lên, vì cách duy nhất để biết một thay đổi lan tới đâu là chạy test. Ở vài nghìn dòng, chạy test gấp đôi chưa tốn thêm token đáng kể — lớn hơn thì chưa ai đo.

Không spam, hủy đăng ký bất kỳ lúc nào.

Bài viết liên quan