TypeScript 7 มาพร้อมกับ “isolated declarations” ซึ่งเป็นโหมดคอมไพเลอร์ที่ช่วยให้ monorepo ขนาดใหญ่สามารถคอมไพล์ไฟล์แบบขนาน (parallel) และช่วยเพิ่มความเร็วในวงจรการตอบสนอง (feedback loops) ของนักพัฒนา

ทำไม isolated declarations ถึงสำคัญในตอนนี้

จนถึงเวอร์ชันนี้ คอมไพเลอร์ของ TypeScript จะประมวลผลไฟล์ declaration (.d.ts) บนเธรดเดียว (single thread) ในโปรเจกต์ที่มีแพ็กเกจครอบคลุมหลายร้อยแพ็กเกจ ขั้นตอนนี้มักจะเป็นตัวหน่วง (throttle) กระบวนการ build ทั้งหมด การแบ่งงานตรวจสอบประเภท (type-checking) ไปยังคอร์ต่างๆ ช่วยให้ isolated declarations ลดเวลาการ build ลงอย่างมากสำหรับทีมที่เก็บไลบรารีทั้งหมดไว้ใน repository เดียวกัน

ผลกระทบนี้จะเห็นได้ทันทีสำหรับองค์กรใดก็ตามที่รันงาน CI หรือต้องการการ rebuild ในเครื่อง (local) ที่รวดเร็ว

เส้นทางสู่การตรวจสอบประเภทแบบขนาน (parallel type checking)

Microsoft ได้เพิ่ม incremental compilation มาหลายปีแล้ว แต่ขั้นตอนการทำ declaration ยังคงเป็นแบบลำดับ (sequential) เนื่องจากไฟล์ต่างๆ มีความเกี่ยวข้องกัน เมื่อ monorepo ขยายใหญ่ขึ้น การประมวลผลแบบเธรดเดียวจึงกลายเป็นคอขวด (bottleneck) ที่สิ้นเปลืองทรัพยากร Isolated declarations จะช่วยทำลายห่วงโซ่ความเกี่ยวข้องกัน (dependency chain) โดยมองว่า public surface ของแต่ละไฟล์เป็นหน่วยอิสระและตรวจสอบพวกมันไปพร้อมๆ กัน

ใครได้ประโยชน์ และใครที่อาจจะไม่เห็นผล

  • ทีมพัฒนาที่มี monorepo ขนาดใหญ่ – จะเห็นการลดลงของเวลา build มากที่สุด โดยเฉพาะบน CI agents ที่มี CPU หลายคอร์
  • โปรเจกต์ขนาดเล็กหรือแอปที่มีแพ็กเกจเดียว – อาจเห็นความเร็วที่เพิ่มขึ้นเพียงเล็กน้อย เนื่องจากขั้นตอน declaration ใช้เวลาเพียงส่วนน้อยของเวลาคอมไพล์ทั้งหมดอยู่แล้ว
  • ทีมที่ใช้ฮาร์ดแวร์ที่มีข้อจำกัด – จะเห็นการปรับปรุงเพียงเล็กน้อยด้วยเหตุผลเดียวกัน

การเปิดตัวฟีเจอร์อื่นๆ ใน TypeScript 7

Isolated declarations มาพร้อมกับชุดการอัปเกรดที่เน้นเรื่องความปลอดภัย:

  • Strict mode refinements – การตรวจสอบใหม่ๆ เช่น strictIndexSignatures จะแจ้งเตือนเมื่อโค้ดเข้าถึงคีย์ของออบเจกต์ที่อาจไม่มีอยู่จริง
  • Named tuple elements – นักพัฒนาสามารถระบุชื่อให้กับตำแหน่งใน tuple ได้ ทำให้ API signature สามารถอธิบายตัวเองได้ (self-documenting)
  • Enhanced satisfies operator – การจัดการ complex generics ที่ดีขึ้นช่วยปรับปรุงการอนุมานประเภท (type inference) โดยไม่เสียความสามารถในการอ่านโค้ด
  • Async context propagation – การรองรับ AsyncContext API ช่วยในการติดตาม (tracing) asynchronous call stacks
  • Decorator metadata – ข้อเสนอของ TC39 ช่วยให้โค้ดในขณะ runtime สามารถตรวจสอบ class decorations ได้
  • Explicit variance annotations – การใช้ + หรือ - กับ generic parameters เพื่อระบุ covariance หรือ contravariance ช่วยเพิ่มความแม่นยำให้กับตัวตรวจสอบประเภท

สิ่งที่เพิ่มเข้ามาเหล่านี้ช่วยตอกย้ำชื่อเสียงของ TypeScript ในฐานะภาษาแบบ “type-first” แต่ isolated declarations เป็นฟีเจอร์เดียวที่จัดการกับปัญหา (pain point) ที่ขยายตัวตามขนาดของ codebase โดยตรง

สิ่งที่ต้องติดตามต่อไป

บทสรุป

Isolated declarations ช่วยให้ทีมที่เน้นการใช้ monorepo สามารถ build ได้เร็วขึ้น สำหรับองค์กรที่ต้องจ่ายค่าบริการตามนาทีของ CI หรือประสบปัญหาการ rebuild ในเครื่องที่ล่าช้า การอัปเกรดเป็น TypeScript 7 ถือเป็นการดำเนินการที่มีความเสี่ยงต่ำ แต่สามารถเปลี่ยนเป็นความประหยัดทั้งในด้านเวลาและต้นทุนที่วัดผลได้ ส่วนฟีเจอร์อื่นๆ ในเวอร์ชันนี้เป็นการเพิ่มระบบความปลอดภัยที่มีประโยชน์ แต่เอนจินการตรวจสอบประเภทแบบขนาน (parallel type-checking engine) คือฟีเจอร์หลักที่ตอบโจทย์ความท้าทายด้านการขยายตัว (scalability) ของการพัฒนา JavaScript ในปัจจุบันโดยตรง