TypeScript 7.0 RC พอร์ตคอมไพเลอร์ทั้งตัวไปเป็น Go · tsc เร็วขึ้นราว 10 เท่า ลองจับเวลาเองได้เลย
TypeScript 7.0 RC พอร์ตคอมไพเลอร์ทั้งตัวจาก TypeScript ไปเป็น Go ทำให้ tsc เร็วขึ้นราว 10 เท่า วิธีพิสูจน์ที่ดีที่สุดคืออย่าเพิ่งเชื่อตัวเลขในประกาศ ให้จับเวลาบิลด์โปรเจกต์เดิมก่อนและหลังด้วยตัวเอง

TypeScript คือภาษาเขียนโปรแกรมที่ต่อยอดจาก JavaScript โดยเพิ่มการระบุ "ชนิดข้อมูล" เข้าไป เพื่อให้เครื่องช่วยจับข้อผิดพลาดของโค้ดได้ตั้งแต่ก่อนเอาไปรันจริง ส่วนตัวที่ทำหน้าที่ตรวจคือคำสั่งชื่อ tsc ปัญหาคือพอโปรเจกต์โตขึ้น การกด npx tsc หนึ่งครั้งอาจต้องนั่งรอเป็นสิบวินาทีกว่าจะรู้ว่าโค้ดพลาดตรงไหน เสียจังหวะคิดไปหนึ่งรอบ วันที่ 18 มิถุนายน 2026 ทีม TypeScript ประกาศ TypeScript 7.0 RC (RC ย่อมาจาก release candidate คือเวอร์ชันทดสอบรอบเกือบสุดท้ายก่อนปล่อยตัวจริง) เพื่อแก้ปัญหานี้โดยตรง ทีมย้ายคอมไพเลอร์ทั้งตัว (ก็คือเจ้า tsc นั่นเอง) จากเดิมที่เขียนด้วย TypeScript ไปเขียนใหม่ด้วยภาษา Go ผลคือ tsc เร็วขึ้นราว 10 เท่าเมื่อเทียบกับ TypeScript 6.0
ตัวเลข 10 เท่าฟังดูเกินจริง แต่ข่าวนี้น่าลองกว่าข่าวอัปเดตทั่วไปตรงที่พิสูจน์เองได้ในไม่กี่นาที ไม่ต้องเชื่อตัวเลขในประกาศ แค่ติดตั้งตัว RC ลงในโปรเจกต์ที่มีอยู่แล้ว จับเวลาบิลด์ก่อนและหลัง แล้ววางสองค่าไว้ข้างกัน ก็จะเห็นส่วนต่างบนจอทันที
ทำไมแค่เปลี่ยนภาษาถึงเร็วขึ้นขนาดนี้

คอมไพเลอร์ของ TypeScript เดิมเขียนด้วย TypeScript เอง แล้วรันบน JavaScript engine ในโลก JavaScript ที่ออกแบบมาให้ยืดหยุ่น ไม่ได้ออกแบบมาเพื่อไล่ตรวจไฟล์เป็นแสนบรรทัดให้เร็วที่สุด ทีม TypeScript เลยพอร์ตคอมไพเลอร์ทั้งตัวไปเป็น Go ซึ่งคอมไพล์เป็น native code และจัดการงานหลาย thread พร้อมกันบน shared memory ได้ดี
ผลลัพธ์เกิดจากสองปัจจัยซ้อนกัน หนึ่ง โค้ดทำงานด้วยความเร็วระดับ native แทนที่จะผ่านชั้น JavaScript สอง ขั้นตอนหนักๆ อย่างการอ่านไฟล์ (parsing) การตรวจชนิด (type-checking) และการแปลงออกเป็น JavaScript (emitting) แยกไปทำงานพร้อมกันหลาย thread แทนที่จะต่อคิวกันทีละขั้น พอรวมสองอย่างนี้เข้าด้วยกัน ตัวเลขที่ทีมงานวัดได้จึงออกมา "often about 10 times faster than TypeScript 6.0" สังเกตว่าเขาใช้คำว่า often ไม่ใช่ always เพราะส่วนต่างจริงขึ้นกับขนาดและลักษณะของแต่ละโปรเจกต์
ลองจับเวลาเองในห้านาที

ถ้าอยากตัดสินว่าเร็วขึ้นจริงไหม ให้เอาโปรเจกต์ของตัวเองมาวัด ไม่ใช่ดูเดโมของคนอื่น เริ่มจากสามขั้นนี้
- จับเวลาของเดิมก่อน รัน
npx tscบนโปรเจกต์ที่ใช้ TypeScript 6.0 อยู่ตอนนี้ แล้วจดเวลาที่ใช้ไว้หนึ่งค่า - ติดตั้งตัว RC ทับลงไปด้วย
npm install -D typescript@rcแล้วยืนยันเวอร์ชันด้วยnpx tsc --versionควรขึ้นว่าVersion 7.0.1-rc - จับเวลาของใหม่ รัน
npx tscอีกครั้งบนโค้ดชุดเดิม แล้ววางเวลาสองค่าไว้ข้างกัน
ส่วนต่างระหว่างสองค่านี้คือคำตอบที่ตรงกับเครื่องและโปรเจกต์ของเราที่สุด ไม่ใช่ตัวเลขเฉลี่ยจากที่อื่น ตัว RC ติดตั้งได้จาก TypeScript บน npm เหมือนแพ็กเกจปกติทุกอย่าง แค่ระบุ tag เป็น rc
โค้ดเดิมไม่ต้องเขียนใหม่ เพราะนี่คือการพอร์ต ไม่ใช่ออกแบบใหม่
จุดที่หลายคนกังวลกับคอมไพเลอร์ตัวใหม่คือ ผลตรวจ type จะเปลี่ยนไปไหม โค้ดที่เคยผ่านจะกลายเป็น error เต็มไปหมดหรือเปล่า คำตอบคือไม่ เพราะทีมงานเลือกวิธี "พอร์ต" ไม่ใช่ "เขียนใหม่" หมายความว่าตรรกะการตรวจชนิด (semantic) ย้ายมาให้เหมือนเดิมแทบทุกบรรทัด ไม่ได้ออกแบบกฎใหม่ ผลตรวจของ TS 7.0 จึงตรงกับ TS 6.0
ความมั่นใจนี้ไม่ได้มาลอยๆ คอมไพเลอร์ใหม่ผ่านชุดทดสอบที่ทีม TypeScript สะสมมากว่าสิบปี และทีมงานนำไปทดสอบกับโค้ดเบสระดับหลายล้านบรรทัดทั้งในและนอก Microsoft ก่อนปล่อย RC บริษัทที่ร่วมทดสอบก่อนปล่อยก็มีตั้งแต่ Bloomberg, Canva, Figma, Google ไปจนถึง Notion, Slack, Vercel ซึ่งล้วนมีโปรเจกต์ขนาดใหญ่ที่ถ้าผลตรวจเพี้ยนจะรู้ทันที
ฝั่งเอดิเตอร์ก็ลองได้เหมือนกัน ติดตั้งส่วนขยาย TypeScript Native Preview ใน VS Code แล้วการเติม import อัตโนมัติ การแสดง inlay hint และการกระโดดไปดูต้นทางของชนิดต่างๆ จะทำงานบนคอมไพเลอร์ตัวใหม่ ส่วนขยายนี้สร้างบน LSP ซึ่งเป็นมาตรฐานกลางที่ให้เอดิเตอร์กับเครื่องมือภาษาคุยกันได้ จึงไม่ได้ผูกกับ VS Code ตัวเดียว เอดิเตอร์อื่นที่รองรับมาตรฐานนี้ก็นำไปใช้ได้เช่นกัน
ของจริงที่ต้องพูดให้ครบ
เร็วขึ้นจริงและโค้ดไม่ต้องแก้ แต่มีสองสามเรื่องที่ทำให้ยังไม่ควรใช้บน production ทันที
เรื่องแรกคือคำว่า RC แปลว่ายังไม่ใช่ตัวจริง ทีมงานวางแผนปล่อยตัวเสถียรภายในราวหนึ่งเดือนจากนี้ ช่วงนี้จึงเหมาะกับการลองวัดและทดลองในเครื่องมากกว่าการสลับทั้งทีมไปใช้
เรื่องที่สองสำหรับคนที่ทำเครื่องมือต่อยอด TypeScript API โดยตรงคือ programmatic API ที่เสถียรจะยังไม่มาใน 7.0 ต้องรอถึง TypeScript 7.1 ซึ่งห่างออกไปอีกหลายเดือน ดังนั้นเครื่องมือใน ecosystem ที่พึ่งพา API ตัวนี้ยังต้องอยู่กับ TS 6.0 ไปก่อน
เรื่องสุดท้ายคือค่า default บางตัวเปลี่ยนไป เช่น strict, module, rootDir และ types รวมถึง flag เก่าบางตัวที่เคยแค่เตือนใน TS 6.0 ตอนนี้กลายเป็น error ทันที ทีมงานจึงแนะนำให้ migrate ผ่าน TS 6.0 ให้เรียบร้อยก่อน แล้วการขยับไป TS 7.0 จะราบรื่นกว่ามาก
ตัวเลขในประกาศบอกได้แค่ว่ามันควรเร็วขึ้น แต่ส่วนต่างที่ตรงกับงานของเราจริงๆ มีอยู่ที่เดียว คือนาฬิกาจับเวลาบนเครื่องของเราเอง
สิ่งที่น่าสนใจของข่าวนี้จึงไม่ใช่ตัวเลข 10 เท่า แต่คือผลที่ตามมาเมื่อ tsc เร็วขึ้นระดับนี้ รอบ feedback ที่เคยยาวจนต้องสลับไปทำอย่างอื่นระหว่างรอ จะสั้นลงจนกลับมาอยู่ในจังหวะเดียวกับการพิมพ์โค้ด เมื่อการตรวจชนิดไม่ใช่อุปสรรคของจังหวะงานอีกต่อไป โครงสร้างของโปรเจกต์ที่เคยต้องตัดให้เล็กลงเพราะกลัวบิลด์ช้า ก็ไม่จำเป็นต้องตัดด้วยเหตุผลนั้นอีก
ที่มา: บทความ Announcing TypeScript 7.0 RC จาก TypeScript Devblog



