10 คะแนน โดย GN⁺ 2025-05-25 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • มีการเปิดเผยพรีวิว ‘tsgo’ ของโปรเจกต์ Corsa ที่พอร์ตคอมไพเลอร์ TypeScript ไปเป็นเนทีฟบนพื้นฐาน Go ผ่าน npm
  • เป็นประกาศต่อเนื่องจากประเด็น TypeScript เร็วขึ้น 10 เท่า ที่เป็นข่าวในเดือนมีนาคม
  • ทำความเร็วได้ มากกว่า 10 เท่าเมื่อเทียบกับ tsc เดิม และ รองรับไฟล์ JS ที่ใช้ JSX และ JSDoc ด้วย
  • มีการออกส่วนขยาย Native Preview สำหรับ VS Code ด้วย แต่ ความสามารถอย่างการเติมโค้ดอัตโนมัติและการค้นหาการอ้างอิงยังอยู่ระหว่างพัฒนา
  • กำลังเตรียมทั้ง Native API ใหม่และ language server ที่อิง LSP พร้อม นำโมดูล Node แบบ Rust ชื่อ libsyncrpc มาใช้
  • บางฟีเจอร์ยังไม่ได้พัฒนา และยังมี ความแตกต่างที่ชัดเจนระหว่าง TypeScript 7 (Corsa) กับ 5.8 (Strada) เดิม

ภาพรวมของ TypeScript Native Preview

  • มีการเปิดเผยพรีวิวของ โปรเจกต์พอร์ต TypeScript แบบเนทีฟ (Corsa) ที่ประกาศเมื่อเดือนมีนาคม 2025
  • เมื่อเทียบกับโค้ดเบสเดิมที่เป็น JavaScript (Strada) แล้ว tsgo ที่เขียนด้วย Go แสดงให้เห็นถึงประสิทธิภาพที่สูงขึ้นกว่า 10 เท่าในโปรเจกต์ขนาดใหญ่ ด้วย การประมวลผลแบบขนานและการใช้ shared memory
  • ในอนาคต tsgo มีแผนจะเข้ามาแทน tsc แต่ตอนนี้ยังแจกจ่ายเป็นแพ็กเกจ npm แยกต่างหาก
    npm install -D @typescript/native-preview  
    npx tsgo --project ./src/tsconfig.json  
    

ความสามารถของส่วนขยาย VS Code

  • เปิดตัวส่วนขยาย “TypeScript (Native Preview)” สำหรับ VS Code

  • หลังติดตั้งแล้วต้องเปิดใช้งานผ่าน Command Palette หรือการตั้งค่า

    "typescript.experimental.useTsgo": true  
    
  • ตอนนี้ยังพึ่งพาส่วนขยายเดิมอยู่และความสามารถยังจำกัด แต่มีแผนปรับปรุงอย่างต่อเนื่อง

รอบการออกรีลีสและโรดแมปการพัฒนา

  • พรีวิวนี้มีแผนจะพัฒนาไปเป็น TypeScript 7 เวอร์ชันทางการ ในอนาคต
  • แจกจ่ายในรูปแบบ Nightly build และอัปเดตอัตโนมัติ
  • สถานะฟีเจอร์ที่ยังไม่รองรับบางส่วน:
    • --build, --declaration, การ emit สำหรับ target ระดับล่าง
    • ฟีเจอร์ฝั่ง editor: การเติมโค้ดอัตโนมัติ, ค้นหาการอ้างอิง, เปลี่ยนชื่อ เป็นต้น

อัปเดตสำคัญ

ความสมบูรณ์ของการตรวจสอบชนิดดีขึ้น

  • มีการพอร์ตฟังก์ชันตรวจสอบชนิดเกือบทั้งหมดเสร็จแล้ว
  • เริ่มรองรับ การตรวจสอบชนิดของ JSX และ JavaScript + JSDoc แล้ว
  • เนื่องจากมีการเปลี่ยนแปลงที่ตั้งใจไว้บางส่วนและความต่างของ lib.d.ts ข้อผิดพลาดที่ได้อาจแตกต่างกัน

รองรับการตรวจสอบชนิดของ JSX

  • เดิม JSX ทำได้เพียงการ parse ในช่วงแรก แต่ ตอนนี้รองรับการตรวจสอบชนิดอย่างสมบูรณ์แล้ว
  • ตัวอย่าง: ในโปรเจกต์ Sentry tsc ใช้เวลา 72 วินาที ขณะที่ tsgo ใช้ 6.7 วินาที จึง เร็วขึ้นมากกว่า 10 เท่า
    tsgo -p . --noEmit --extendedDiagnostics  
    

การตรวจสอบชนิดของไฟล์ JavaScript

  • ความสามารถในการวิเคราะห์ไฟล์ JS จาก JSDoc ก็ถูกนำมาเขียนใหม่ในโค้ดเนทีฟเช่นกัน
  • มีการรีแฟกเตอร์ให้เป็นแนวทางที่ ทันสมัยและสม่ำเสมอมากขึ้น กว่าวิธีเดิม
  • แพตเทิร์นแบบเก่าบางอย่างอาจไม่ถูกจดจำอีกต่อไป

ฟีเจอร์ฝั่ง editor (อิง LSP)

  • กำลังเขียนใหม่จาก TSServer เดิมไปเป็น language server ที่อิง LSP
  • ในเวอร์ชันแรกมีฟีเจอร์ แสดงข้อผิดพลาด, ไปยังคำนิยาม, hover
  • ล่าสุดมีการเพิ่มฟีเจอร์ completion แล้วด้วย

สถานะการพัฒนา API

  • กำลังพัฒนา ชั้น API ที่อิง IPC
  • ทำให้ภาษาโปรแกรมต่าง ๆ สามารถสื่อสารกับโปรเซส TypeScript ได้
  • เพื่อติดต่อสื่อสารแบบ synchronous จาก Node.js มีการนำโมดูล Rust libsyncrpc มาใช้
  • การออกแบบ API ยังอยู่ในระยะเริ่มต้นและกำลังเปิดรับฟีดแบ็ก

ความแตกต่างจาก TypeScript เดิม

  • จากความต่างของการตั้งค่าบางอย่าง อาจเกิดข้อผิดพลาดในโปรเจกต์เดิมได้:

    • ตัวอย่าง: --moduleResolution: node → แนะนำให้ใช้ bundler หรือ nodenext
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • ความแตกต่างอื่น ๆ:

    • JSX emit ทำได้เพียงเก็บไว้ตามเดิม
    • ยังไม่รองรับ declaration emit
    • ยังไม่รองรับ --build
    • language service ที่เกี่ยวข้องกับ project references ยังไม่สมบูรณ์

แผนถัดไป

  • ตั้งเป้าพัฒนา --build และฟีเจอร์ editor หลักส่วนใหญ่ให้เสร็จภายในสิ้นปีนี้
  • ความคืบหน้าการพัฒนาจะมีการอัปเดตอย่างต่อเนื่องผ่านบล็อกและ nightly release

3 ความคิดเห็น

 
riki3 2025-05-25

ผมคอมไพล์ lsp เองแล้วใช้งานอยู่ พอเปลี่ยนเป็น Go ก็รู้สึกได้ชัดเลยว่าการใช้ทรัพยากรลดลง

 
cnaa97 2025-05-25

ช่วงนี้แค่ย้าย js ไป rust / go เพื่อเพิ่มประสิทธิภาพก็กำลังเป็นกระแสนิยม

 
click 2025-05-25

ตอนรีแฟกเตอร์บ่อย ๆ มีหลายครั้งที่การพาร์สโค้ดฝั่ง tsserver ช้าจนทั้งเอดิเตอร์ค้างไปเลย หวังว่าจะออกมาเร็ว ๆ เพื่อจะได้หลุดพ้นจากความทรมานนี้สักที