ฉันควรใช้ typescript หรือไม่ หรือฉันสามารถใช้ ES6 ได้ [ปิด]


286

งานประจำวันของฉันคือผู้พัฒนาลูกค้าโดยใช้ AngularJS เรากำลังประเมินว่าเราต้องการไปกับ TypeScript หรือไม่ ฉันทำการค้นคว้าเกี่ยวกับ typescript และเกือบทุกแพคเกจ JavaScript ที่ฉันต้องการจะต้องมีไฟล์ประเภทคำจำกัดความ ฉันพบว่าไม่สะดวกมากโดยเฉพาะถ้าฉันต้องการลองอะไรใหม่ ๆ และพวกเขาไม่มีคำจำกัดความสำหรับมัน มันน่าผิดหวังจริงๆ (แม้แต่นิยาม jQuery ปัจจุบันยังทำให้ฉันมีปัญหาถ้าฉันต้องการใช้ typescript 1.5 เบต้า) ฉันเริ่มดู ES6 และดูเหมือนว่า TypeScript ฉันควรใช้ ES6 แทนไหม นอกจากนี้ฉันได้ยินมาว่า angular 2 จะได้รับการสนับสนุนอย่างเต็มที่สำหรับ TypeScript นั่นเป็นเหตุผลหนึ่งที่ฉันควรจะอยู่กับมันหรือไม่


11
คุณไม่จำเป็นต้องใช้ไฟล์คำจำกัดความทุกครั้งสำหรับสิ่งใหม่ ถ้าคุณต้องการใช้declare var MyNewLibraryName: any;ไลบรารี่ที่ไม่มีประเภทคุณสามารถเขียนได้ตามต้องการโดยที่คอมไพเลอร์จะบ่น
David Sherret

2
ด้วยคะแนนโหวตเพื่อปิดคำถามนี้ฉันขอแนะนำให้ถามข้อดี / ข้อเสียเพิ่มเติมที่เกี่ยวข้องกับแต่ละวิธีแทนที่จะถามว่าวิธีไหนดีที่สุดวิธีนี้คุณจะขอข้อมูลและไม่ใช่เพื่อความคิดเห็น
Brocco

typescript อัปเดตคุณสมบัติจาวาสคริปต์รุ่นใหม่ก่อนที่เบราว์เซอร์หลัก ๆ ทั้งหมดตัวเลือกของฉันคือการใช้ typescript และคอมไพล์เป็นเวอร์ชันจาวาสคริปต์ตามเบราว์เซอร์เป้าหมายของคุณ (แน่นอนแม้จะง่ายต่อการ transpile จาวาสคริปต์รุ่นหนึ่งไปยังที่อื่น ๆ )
BHV

หากคุณไม่ใส่ใจเกี่ยวกับความสามารถในการตัดรหัสของคุณอย่างถูกต้องและคุณต้องการให้ Immutable.js ยากต่อการทำงานและคุณชอบที่จะเขียนแผ่นและคุณคิดว่า DRY overrated และคุณชอบทำซ้ำตัวเองและคุณ สนุกกับการเขียนคำจำกัดความประเภทสำหรับรหัสของคนอื่นและคุณชอบการจัดการประเภทตามที่พวกเขาเปลี่ยนแปลงภายใต้คุณและคุณเพลิดเพลินไปกับการสลับไปมาระหว่างโปรแกรมแก้ไขข้อความที่แตกต่างกันสองแบบเพราะไม่มีอะไรทำงานได้อย่างถูกต้อง แต่ถ้าคุณมีสติเลือก ES6 / 7 และ Babel
gargantuan

คำตอบ:


114

ฉันใช้ typescript ในโครงการเชิงมุมในปัจจุบันของฉันประมาณหนึ่งปีครึ่งและในขณะที่มีปัญหาเล็กน้อยที่มีคำจำกัดความทุกครั้งจากนั้นโครงการDefinitelyTypedทำหน้าที่ได้อย่างยอดเยี่ยมในการรักษาไลบรารี่รุ่นล่าสุดที่ได้รับความนิยมสูงสุด

ต้องบอกว่ามีช่วงการเรียนรู้ที่ชัดเจนเมื่อเปลี่ยนจากวานิลลา JavaScript เป็น TS และคุณควรคำนึงถึงความสามารถของคุณและทีมของคุณในการเปลี่ยน นอกจากนี้หากคุณกำลังใช้แองกูลาร์ 1.x ตัวอย่างส่วนใหญ่ที่คุณจะพบออนไลน์จะต้องให้คุณแปลจาก JS เป็น TS และโดยรวมมีทรัพยากรไม่มากในการใช้ TS และแองกูลาร์ 1.x ด้วยกันตอนนี้ .

หากคุณวางแผนที่จะใช้เชิงมุม 2 มีตัวอย่างมากมายที่ใช้ TS และฉันคิดว่าทีมจะยังคงจัดทำเอกสารส่วนใหญ่ใน TS แต่คุณไม่จำเป็นต้องใช้ TS เพื่อใช้เชิงมุม 2

ES6 มีคุณสมบัติที่ดีและฉันวางแผนที่จะทำความคุ้นเคยกับมัน แต่ฉันจะไม่พิจารณาว่าเป็นภาษาที่พร้อมใช้งานจริงในตอนนี้ สาเหตุหลักมาจากการขาดการสนับสนุนจากเบราว์เซอร์ปัจจุบัน แน่นอนคุณสามารถเขียนโค้ดของคุณใน ES6 และใช้ transpiler เพื่อรับไปยัง ES5 ซึ่งดูเหมือนจะเป็นสิ่งที่ได้รับความนิยมในขณะนี้

โดยรวมแล้วฉันคิดว่าคำตอบจะมากับสิ่งที่คุณและทีมของคุณเรียนรู้ได้อย่างสะดวกสบาย โดยส่วนตัวฉันคิดว่าทั้ง TS และ ES6 จะได้รับการสนับสนุนที่ดีและอนาคตที่ยาวนานฉันชอบ TS แม้ว่าคุณจะได้รับคุณสมบัติทางภาษาที่เร็วกว่าและตอนนี้การสนับสนุนการใช้เครื่องมือ (ในความคิดของฉัน) นั้นดีขึ้นเล็กน้อย


40
ES6 ไม่รองรับเบราว์เซอร์ ?? คุณเป็นนักการเมือง MS บ้างไหม? ทั้ง typescript และ ES6 ต้องการ transpiler หมายความว่าคุณไม่ได้ใช้ TS หรือ ES6 บนเว็บ แต่ใช้บางอย่างเช่น Babel TS เป็น Angular 2 ถูกเพิ่มเข้ามาเพื่อผูกมัดทางการเมือง btw Google และ MS
STEEL

40
@STEEL ไม่ใช่นักการเมือง MS คุณเพียงแค่ตอบสนองต่อคำตอบที่ฉันทิ้งไว้เมื่อปีที่แล้วเมื่อการสนับสนุน ES6 มี จำกัด มาก และคุณมีอิสระที่จะคิดว่าการตัดสินใจของ TS และ Angular 2 นั้นเป็นเรื่องทางการเมือง แต่นั่นไม่ได้เปลี่ยนจุดของฉันที่เขียนขึ้นสำหรับภาษานั้นและทีม Angular2 สนับสนุนการใช้งานของมัน
Kent Cooper

18
นี่คือจาก 2 ปีที่ผ่านมา แต่เวลาได้แสดงให้เห็นว่ามาตรฐานในท้ายที่สุดเป็นอย่างไร ปัจจุบัน ES6 รองรับเบราว์เซอร์ส่วนใหญ่อย่างมาก คลาสฟังก์ชั่นลูกศร ฯลฯ ในที่สุดเราจะไปถึงจุดที่เบราว์เซอร์จะสนับสนุนจาวาสคริปต์ที่ดีพอที่จะทำให้ transpilers ไม่จำเป็น typescript จะต้องมี transpiler เสมอ ทำไมสิ่งนี้จึงสำคัญ เพราะมันเป็นหน้าที่ของเราในฐานะนักพัฒนาเว็บที่จะผลักดันเว็บให้ก้าวหน้าและนั่นคือการสนับสนุนมาตรฐาน
monzonj

3
มันเป็นคนเกียจคร้าน ES6 ไม่สนับสนุนความปลอดภัยประเภท "เวลารวบรวม" จริง มีสิ่งดีๆมากมายใน ES6 แต่ความจริงที่ฉันไม่สามารถพูดได้ "อาร์กิวเมนต์นี้เป็นสตริง (หรืออินสแตนซ์ของคลาส X), dammit" และสามารถตรวจสอบได้ว่าเป็นส่วนหนึ่งของกระบวนการสร้างของคุณยังไม่ดีสำหรับ โปรแกรมขนาดใหญ่ (ส่วนหน้าและส่วนหลังเหมือนกัน)
แบรดพีบอดี

คุณสามารถใช้เครื่องมือเช่นFlow Typeเพื่อเพิ่มการรองรับประเภทให้กับ ES6 หากคุณต้องการ จนกว่า ES6 จะแพร่หลายในเบราว์เซอร์ทั้งหมด Toolchain ของคุณจะประกอบด้วย Flow-> ES6-> Babel ซึ่งเป็นทางอ้อมจำนวนมาก แต่ทำงานและฉันคิดว่าเป็นห่วงโซ่ที่นิยมมากในปัจจุบัน
Prahlad Yeri

660

แผนผังการตัดสินใจระหว่าง ES5, ES6 และ TypeScript

คุณมีขั้นตอนการสร้างหรือไม่?

  • ใช่ - ใช้ ES5
  • ไม่ไปต่อ

คุณต้องการใช้ประเภทหรือไม่?

  • ใช่ - ใช้ TypeScript
  • ไม่ใช่ - ใช้ ES6

รายละเอียดเพิ่มเติม

ES5เป็น JavaScript ที่คุณรู้จักและใช้งานในเบราว์เซอร์ในวันนี้มันคือสิ่งที่มันเป็นและไม่จำเป็นต้องมีขั้นตอนการสร้างเพื่อแปลงมันเป็นสิ่งที่จะทำงานในเบราว์เซอร์ของวันนี้

ES6 (หรือเรียกอีกอย่างว่าES2015 ) คือการทำซ้ำครั้งต่อไปของ JavaScript แต่จะไม่ทำงานในเบราว์เซอร์ของวันนี้ มี transpilers ค่อนข้างน้อยที่จะส่งออก ES5 สำหรับใช้ในเบราว์เซอร์ มันยังคงเป็นภาษาแบบไดนามิก (อ่าน: ไม่พิมพ์)

TypeScriptจัดให้มีระบบการพิมพ์ที่เป็นตัวเลือกในขณะที่ดึงคุณสมบัติจาก JavaScript รุ่นอนาคต (ES6 และ ES7)

หมายเหตุ: มี transpilers อยู่มากมาย (เช่น babel, TypeScript) จะช่วยให้คุณสามารถใช้ฟีเจอร์จาก JavaScript เวอร์ชันต่อไปในวันนี้และการส่งออกโค้ดที่จะยังคงทำงานในเบราว์เซอร์ของวันนี้


5
มันไม่ง่ายอย่างนั้น มีปัจจัยอื่นอีกมากมาย
RaoulRubin

16
@Rouloulububi นั่นเป็นความจริงมีปัจจัยอื่น ๆ อีกมากมาย แต่สำหรับคำถามที่ปิดที่นี่อย่างน้อยก็เป็นจุดเริ่มต้นสำหรับกระบวนการตัดสินใจ
Brocco

1
PS - ES6 + FlowType = Love :)
Red2678

3
@RavinderPayal มีคำถามที่น่าสนใจคือ Brocco จากมุมมองของตลาดเป็นสิ่งที่เป็นคุณค่าของ TS VS ES5 หรือ ES6 และสิ่งที่ตามเส้นที่หรือไม่
J.Wells

3
ตกลงดังนั้นโพสต์นี้มีอายุสองปี / มาเร็ววันนี้ถึงวันที่ 28 กันยายน 2017 เบราว์เซอร์ส่วนใหญ่รองรับ ES6 หรือไม่?
Dewey Banks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.