Node.js เพิ่มการรองรับ TypeScript แบบทดลอง
(github.com/nodejs)โมดูล: เพิ่ม --experimental-strip-types
-
สามารถรันไฟล์ TypeScript บน Node.js ได้
- เมื่อตั้งค่าแฟล็ก
--experimental-strip-typesจะสามารถรันไฟล์ TypeScript ได้ - Node.js จะแปลงซอร์สโค้ด TypeScript เป็นซอร์สโค้ด JavaScript
- ในกระบวนการแปลงจะไม่มีการตรวจสอบชนิดข้อมูล และชนิดข้อมูลจะถูกลบออก
- เมื่อตั้งค่าแฟล็ก
-
แรงจูงใจ
- การทำให้สามารถรันไฟล์ TypeScript ได้โดยไม่ต้องพึ่งพา dependency หรือ loader ภายนอกเป็นสิ่งสำคัญ
- ต้องการให้ผู้ใช้สามารถรัน
node foo.tsได้
-
ความหมายของการ strip type
- การ strip type คือการลบ type ทั้งหมดออกและแปลงอินพุตให้เป็นโมดูล JavaScript
- ตัวอย่าง:
const foo: string = "foo";จะถูกแปลงเป็นconst foo = "foo";
-
เหตุผลที่เลือก @swc/wasm-typescript
- เพราะมีความเรียบง่าย
- เครื่องมืออื่นต้องเพิ่ม Rust หรือ Go แต่ @swc/wasm-typescript เป็นแพ็กเกจขนาดเล็กที่ต้องใช้เพียงไฟล์ wasm และ js
- มีการใช้งานใน Deno ด้วย จึงเชื่อถือได้
-
ข้อจำกัด
- ฟีเจอร์เฉพาะของ TypeScript เช่น enum, namespace เป็นต้น จะไม่ถูกแปลง
- ไม่รองรับ import ที่ไม่มีนามสกุลไฟล์
-
แผนในอนาคต
- อาจมีการนำไปใช้งานใน native layer
- อาจเพิ่มการรองรับ source map
สรุปโดย GN⁺
- อธิบายฟีเจอร์ใหม่ที่ช่วยให้สามารถรันไฟล์ TypeScript บน Node.js ได้
- ทำให้สามารถแปลงและรันไฟล์ TypeScript เป็น JavaScript ได้ โดยไม่มีการตรวจสอบชนิดข้อมูล
- สิ่งนี้ช่วยให้ผู้ใช้สามารถรันไฟล์ TypeScript ได้โดยไม่ต้องมี dependency ภายนอก ทำให้สภาพแวดล้อมการพัฒนาง่ายขึ้น
- ฟีเจอร์นี้ถูกพัฒนาด้วย @swc/wasm-typescript และในอนาคตก็มีการพิจารณาการนำไปใช้งานใน native layer ด้วย
- อาจเป็นประโยชน์กับโปรเจกต์ที่ใช้งาน TypeScript และ JavaScript ร่วมกัน
1 ความคิดเห็น
ความเห็นจาก Hacker News
การลบ type ของ TypeScript ออกนั้นเป็นไปไม่ได้หากไม่มีไวยากรณ์ของ TypeScript เอง การลบ type ไม่ใช่งานในระดับโทเคน และไวยากรณ์ของ TypeScript ก็ยังคงเปลี่ยนแปลงอยู่ตลอด
foo < bar & baz > ( x )ถูกตีความแตกต่างกันใน TypeScript 1.5ถ้า Node.js สามารถรันไฟล์ TypeScript ได้โดยตรง TypeScript compiler ก็คงไม่จำเป็นต้องลบ type แล้วแปลงเป็น JavaScript
ถ้าฟีเจอร์นี้กลายเป็นค่าปริยาย ก็สงสัยว่า ecosystem ของ NPM จะตอบสนองอย่างไร
engine: nodejs >= 25ใน package.json แล้วข้ามขั้นตอน build ไปเลยถ้า Node สามารถตรวจสอบ type จากใน JS ได้ จะเป็นประโยชน์มาก
ประสบการณ์นักพัฒนา (DX) ของ Bun ในด้านนี้ถือว่าไม่เคยมีมาก่อน และตอบโจทย์การใช้งานส่วนใหญ่ได้แล้ว
ชอบ TypeScript มากและโหยหา TypeScript runtime มานานแล้ว
ฟีเจอร์ deno ที่ชอบที่สุดกำลังถูกนำเข้า Node โดยตรง
เป็นเดือนที่สำคัญมากสำหรับ Node
เป็นผู้เขียน PR นี้เอง ถามมาได้เลย
เริ่มใช้ Node.js ทำงานฝั่งแบ็กเอนด์ตั้งนานแล้ว และมันมีข้อดีกว่า PHP อยู่มาก