ข้อจำกัดประการสำคัญของ JavaScript คือการไม่กำหนดชนิดของตัวแปร (type) แบบตายตัว (static typing) เมื่อ JavaScript ได้รับความนิยมเพิ่มขึ้นเรื่อยๆ จึงมีคนพยายามแก้ปัญหานี้ด้วยการประดิษฐ์ภาษาหรือเครื่องมือใหม่ๆ ที่เป็น JavaScript แบบมี type เข้ามา (เช่น TypeScript, Closure Compiler หรือ Flow) เพื่อจัดระเบียบการเขียนโค้ดให้มีโครงสร้างมากขึ้น
แนวทางของภาษาแบบ TypeScript คือให้มนุษย์เขียนโค้ดด้วยภาษาใหม่ที่มีระเบียบขึ้น จากนั้นใช้เครื่องมือ "แปลง" (ในที่นี้คือ transpiler) ภาษาใหม่กลับมาเป็น JavaScript อีกทีหนึ่ง
กรณีของ TypeScript ที่มีตัวแปรแบบ static type จึงต้องแปลงมาเป็น JavaScript ที่ไม่มี type ซึ่งวิธีการแปลงมักอยู่ในรูปการเปลี่ยนชนิดตัวแปรเป็นคอมเมนต์
ถึงแม้แนวทางนี้ในปัจจุบันมีเครื่องมือรองรับมากมาย แต่ก็ยังมีความไม่สะดวกของการแปลงโค้ด และความไม่ตรงไปตรงมาของการเขียนโค้ดอยู่บ้าง
ไมโครซอฟท์ในฐานะผู้สร้างภาษา TypeScript จึงมีไอเดียใหม่ เสนอแก้สเปกของ JavaScript ให้ "มองข้าม" การกำหนดชนิดของตัวแปรของ TypeScript เพื่อจะได้ไม่ต้องมีกระบวนการแปลงโค้ดอีกต่อไป!
ตัวอย่างการแปลง TypeScript เป็น JavaScript ในปัจจุบัน ที่นำข้อมูลชนิดตัวแปรมาใส่ไว้ในคอมเมนต์ (ภาพบน) และข้อเสนอใหม่คือ เราสามารถระบุ type ลงไปใน JavaScript ได้เลย (ภาพล่าง)
สิ่งที่เกิดขึ้นคือ โปรแกรมเมอร์สามารถเขียนโค้ดด้วย syntax แบบ TypeScript เหมือนเดิม รันด้วยคอมไพเลอร์ TypeScript ก็ทำงานได้เหมือนเดิม แต่สามารถนำโค้ดเดียวกันไปคอมไพล์ด้วยรันไทม์/คอมไพเลอร์ของ JavaScript (เช่น เบราว์เซอร์หรือ V8 engine) ได้ทันที โดยรันไทม์ JavaScript จะมองข้าม syntax เหล่านี้ไป
ข้อเสนอนี้จำเป็นต้องปรับแก้ syntax ของ JavaScript เล็กน้อย เช่น เพิ่ม modifier ตัว "?" เข้ามาด้วย (รายละเอียดข้อเสนอ) ซึ่งทีมของไมโครซอฟท์จะต้องเสนอไปยังคณะกรรมการ ECMAScript ในฐานะผู้กำหนดสเปกของ JavaScript ในที่ประชุมกรรมการเดือนมีนาคมนี้
ข้อเสนอของไมโครซอฟท์สร้างการถกเถียงอย่างมากในโลก JavaScript (รายละเอียด) มีทั้งฝ่ายที่สนับสนุนและคัดค้าน และตอนนี้ยังไม่มีข้อสรุปว่าคณะกรรมการ ECMAScript มีแนวโน้มจะตอบรับแค่ไหน
ที่มา - Microsoft