ค้นหาเว็บไซต์

javascript - วิธีการย้ายไปใช้ typescript จาก create-react-app?


ฉันมีแอปที่ฉันสร้างมาจาก create-react-app ตอนนี้ฉันต้องการเพิ่ม TypeScript เข้าไป ดังนั้นฉันจึงทำตามคู่มือนี้: https://facebook.github.io/create-react-app/docs/adding-typescript

แต่ผมกำลังเจอปัญหา 2 อย่าง อย่างแรก ตอนนี้มันบังคับให้ผมต้องเปลี่ยนหลายอย่างในโปรเจกต์ทั้งหมด ทั้งที่ผมแค่อยากย้ายทีละนิดและเปลี่ยนทีละไฟล์ และยังให้แอปคอมไพล์ได้ แทนที่จะทำทั้งหมดในครั้งเดียว มันเป็นไปไม่ได้จริงหรือ?

ประการที่สอง ฉันได้รับข้อผิดพลาดนี้: ไม่สามารถคอมไพล์เนมสเปซได้เมื่อมีการใช้แฟล็ก '--isolatedModules' TS1208

แต่เมื่อฉันเปลี่ยน "isolatedModules": true, เป็น false และโหลดแอปใหม่ มันก็จะเปลี่ยนกลับเป็น true โดยอัตโนมัติ และฉันก็ไม่รู้ว่าทำไม

คำตอบ #1

ฉันไม่แน่ใจว่าคุณกำลังระบุตัวเลือกคอมไพเลอร์ที่บรรทัดคำสั่งหรือไม่ แต่ถ้าเป็นเช่นนั้น ฉันแนะนำให้คุณใช้ไฟล์ tsconfig.json แทน

Typescript มีตัวเลือก allowJs ที่อาจจะช่วยได้ (ดูได้ที่ https://www.typescriptlang.org/docs/handbook/compiler-options.html) นอกจากนี้ให้แน่ใจว่าคุณไม่ได้เปิดใช้งานตัวเลือก noImplicitAny (ซึ่งปิดอยู่ตามค่าเริ่มต้น) หากคุณไม่อยากต้องเขียนไฟล์ .d.ts สำหรับทุกไฟล์ .js ที่นำเข้าจาก TypeScript—ซึ่งหมายความว่าในกรณีที่ไม่มีไฟล์ .d.ts (ไฟล์กำหนดชนิด) โมดูล JS ที่นำเข้าจะมีชนิดเป็น any (โดยปกติผมจะแนะนำให้ เปิดใช้งาน noImplicitAny แต่ไม่ควรทำจนกว่าคุณจะย้ายโค้ดเสร็จ). ) ในทางปฏิบัติ การใช้ allowJs และเก็บโค้ดจำนวนมากของคุณในไฟล์ .js จะง่ายกว่าการเปลี่ยนชื่อไฟล์ทั้งหมดเป็น .ts ตั้งแต่เริ่มต้น แม้ว่าจะเป็นเรื่องจริงที่ TypeScript เป็นซูเปอร์เซ็ตของ JavaScript แต่เมื่อคุณเริ่มผสมโค้ดที่มีการระบุประเภทกับโค้ดที่ไม่มีการระบุประเภท คุณจะเริ่มเจอข้อผิดพลาดเกี่ยวกับประเภทค่อนข้างเร็ว (การนำเข้าโมดูล JS เป็นประเภท any เป็นทางหนีทีไล่)

บังเอิญว่าฉันเพิ่งไปเจอทางเลือกของ TypeScript ที่อ้างว่ามีระบบชนิดข้อมูลที่มั่นคงกว่าและยังสามารถทำงานร่วมกับโค้ด JS ที่ไม่มีการกำหนดชนิดได้ง่ายขึ้น แต่ปัจจุบันมันยังอยู่ในเวอร์ชันพรีวิวสำหรับนักพัฒนา (และยังไม่มีชุมชนรอบ ๆ มากนัก) ฉันอ่านเกี่ยวกับมันเพียงเล็กน้อยและอาจจะไม่แนะนำมันเหนือ TypeScript โดยเฉพาะด้วยเหตุผลด้านการใช้งานจริง (อย่างน้อยนี่คือความรู้สึกแรกของฉัน) แต่ก็ถือว่าน่าสนใจ...ถ้าคุณอยากรู้คุณสามารถไปดูได้ที่นี่: https://www.onux.com/jspp/