Skip to content

ตัวเลือก tsconfig อธิบาย

ตัวเลือก tsconfig ที่สำคัญจริง จัดกลุ่มตามหน้าที่: กระชับการตรวจสอบชนิด กำหนด target ของภาษาและโมดูล ควบคุมสิ่งที่ถูกสร้างออกมา จัดแมปพาธของ import จัดโครงสร้างบิลด์แบบหลายโปรเจกต์ และปรับแต่งการตรวจสอบที่เหลือ

tsconfig บอกคอมไพเลอร์ว่าจะรวมไฟล์ใดบ้างและจะเข้มงวดแค่ไหน มีสองตัวเลือกที่ทำงานส่วนใหญ่: target กำหนดระดับการสร้าง JavaScript และ strict เปิดการตรวจสอบความปลอดภัยทั้งชุดในครั้งเดียว ตัวเลือกด้านล่างคือตัวที่เปลี่ยนพฤติกรรมจริง ๆ ส่วนแฟล็กที่เปิดอยู่โดยค่าเริ่มต้นจะมีหมายเหตุกำกับ เริ่มจากสืบทอดคอนฟิกจากเบส แล้ว override เฉพาะส่วนที่ต่างออกไป

ตารางอ้างอิง · 55 รายการ
55 of 55 rows
ความเข้มงวด
สวิตช์หลัก: เปิด strictNullChecks, noImplicitAny และอีกหลายตัวพร้อมกันในครั้งเดียว
แจ้งข้อผิดพลาดเมื่อชนิดของพารามิเตอร์หรือตัวแปรไม่สามารถอนุมานได้ (มิฉะนั้นจะกลายเป็น any)
null และ undefined ไม่สามารถกำหนดให้กับทุกชนิดได้อีกต่อไป ต้องเลือกใช้อย่างชัดเจน
ตรวจสอบพารามิเตอร์ของฟังก์ชันแบบ contravariant; จับพารามิเตอร์ callback ที่ไม่แน่นอนเพียงพอ
ตรวจชนิดของ bind, call และ apply ตามพารามิเตอร์ที่ฟังก์ชันประกาศไว้
แจ้งข้อผิดพลาดเมื่อ property ของคลาสไม่มีค่าเริ่มต้นและไม่ได้รับการกำหนดค่าใน constructor
property แบบ optional { p?: T } ไม่รับการกำหนดค่า undefined แบบระบุตรง ๆ อีกต่อไป
บังคับให้ใช้คีย์เวิร์ด override กับเมมเบอร์ที่ซ่อนเมมเบอร์ของคลาสฐาน
แจ้งข้อผิดพลาดเมื่อตัวแปรโลคัลที่ประกาศแล้วไม่เคยถูกอ่าน
แจ้งข้อผิดพลาดเมื่อพารามิเตอร์ของฟังก์ชันที่ประกาศแล้วไม่เคยถูกอ่าน
แจ้งข้อผิดพลาดเมื่อ expression statement ไม่มีผลใด ๆ
ห้ามเข้าถึงด้วยจุดสำหรับคีย์จาก index signature; ใช้วงเล็บเหลี่ยม (obj["key"])
แจ้งข้อผิดพลาดเมื่อเส้นทางโค้ดหนึ่งคืนค่า แต่อีกเส้นทางไม่คืนค่า
แจ้งข้อผิดพลาดเมื่อ case ใน switch ไหลไปยัง case ถัดไปโดยไม่มี break
ภาษาและโมดูล
ระดับการสร้าง JavaScript (เช่น ES2022); target ใหม่กว่าช่วยลดการแปลงขั้นต่ำลง
API ในตัวที่ใช้ได้ (เช่น ES2022, DOM, DOM.Iterable)
ระบบโมดูลที่สร้างออกมา (เช่น ESNext, CommonJS, NodeNext)
ใช้กฎจริงของ Node: แต่ละไฟล์เลือก CJS หรือ ESM จาก package.json ที่ใกล้ที่สุด และ import แบบ relative ต้องมีนามสกุลไฟล์
วิธีการแก้ไขพาธของ import (เช่น bundler, node, nodenext)
เกณฑ์ที่ไฟล์จะนับเป็นโมดูล: auto (ตามการมีอยู่ของ import/export), legacy หรือ force (เสมอ)
อนุญาตการ import แบบ default จากโมดูล CommonJS (ค่าเริ่มต้นคือ true ในการตั้งค่าส่วนใหญ่)
อนุญาตการ import แบบ default จากโมดูลที่ export เฉพาะค่าแบบ named (มีผลเฉพาะระดับชนิด)
import ถูกสร้างออกมาตรงตามที่เขียน; import ที่เป็นแบบ type ล้วนต้องใช้ import type (TS 5)
ให้ import โหลดไฟล์ .json เป็นค่าที่มีชนิดได้
รวมไฟล์ .js เป็นอินพุตของการคอมไพล์
ตรวจชนิดของไฟล์ .js ด้วยโดยอ่านคอมเมนต์ JSDoc; โดยปริยายจะเปิด allowJs
วิธีคอมไพล์ .tsx: react-jsx (automatic runtime), react (React.createElement) หรือ preserve
จำกัดแพ็กเกจ @types ที่รวมอัตโนมัติไว้ที่รายการนี้; อาร์เรย์ว่างหมายถึงไม่รวมเลย
โฟลเดอร์ที่สแกนหาแพ็กเกจ @types แทนการไล่ทุก node_modules/@types ขึ้นไปตามทรี
รับประกันว่าทุกไฟล์แปลงรหัสแบบแยกเดี่ยวได้ (bundler และ esbuild ต้องการ)
การสร้างผลลัพธ์
ตำแหน่งที่เขียน JavaScript ที่คอมไพล์แล้ว
รูทของไฟล์ต้นฉบับ; ช่วยให้โครงสร้างทรีผลลัพธ์คงที่
สร้างไฟล์ .js.map เพื่อให้ดีบักเกอร์แมปกลับไปยัง TypeScript
ฝัง source map เป็นคอมเมนต์ภายในไฟล์ .js แทนการใช้ไฟล์ .js.map แยก
สร้างไฟล์ประกาศชนิด .d.ts (จำเป็นสำหรับไลบรารี)
สร้างไฟล์ .d.ts.map เพื่อให้เอดิเตอร์กระโดดจาก declaration กลับไปยังซอร์ส TypeScript
สร้างเฉพาะไฟล์ .d.ts; ปล่อยให้ bundler จัดการ JavaScript (ต้องมี declaration หรือ composite)
ใช้ helper เช่น __rest จาก tslib ซ้ำ แทนที่จะสร้างลงในทุกไฟล์
แก้ for..of, spread และ destructuring บน iterable ให้ถูกต้องเมื่อ target เก่ากว่า ES2015
ตัดคอมเมนต์ออกจาก JavaScript ที่สร้าง
ตรวจชนิดอย่างเดียว ไม่เขียนไฟล์ (ใช้เมื่อ bundler เป็นผู้สร้างผลลัพธ์)
พาธ
ไดเรกทอรีฐานสำหรับการแก้ไขโมดูลที่ไม่ใช่แบบ relative
จับคู่ prefix ของ import ไปยังตำแหน่ง เช่น { "@/*": ["src/*"] }
ถือว่าหลายไดเรกทอรีเป็นรูทเสมือนเดียวสำหรับการแก้ไขพาธ
โครงสร้างโปรเจกต์
ทำเครื่องหมายโปรเจกต์ว่า build ได้สำหรับ project references (เปิด declaration และ incremental)
อ้างอิงโปรเจกต์ tsconfig อื่นเพื่อบิลด์ที่เร็วขึ้นและแยกส่วน
บันทึกข้อมูลบิลด์เพื่อข้ามการตรวจไฟล์ที่ไม่เปลี่ยนแปลงในรอบถัดไป
การตรวจสอบอื่น ๆ
ข้ามการตรวจชนิดของไฟล์ .d.ts เพื่อความเร็ว (ค่าเริ่มต้น true)
แจ้งข้อผิดพลาดเมื่อ import ไม่ตรงกับตัวพิมพ์ใหญ่-เล็กจริงของไฟล์
การเข้าถึงแบบ index บนอาร์เรย์คืน T | undefined ไม่ใช่ T
ฟิลด์ของคลาสถูกสร้างด้วย Object.defineProperty แทนการกำหนดค่าตรง ๆ (ค่าเริ่มต้น true สำหรับ target ES2022 ขึ้นไป)
เปิดใช้ไวยากรณ์ decorator แบบเดิมที่เฟรมเวิร์กรุ่นเก่าใช้ (ก่อนมาตรฐาน)
แสดงชื่อชนิดแบบเต็มในข้อความแจ้งข้อผิดพลาด แทนที่จะตัดทอยาว ๆ
แจ้งข้อผิดพลาดเมื่อ side-effect import เปล่า ๆ (import "./x.css") แก้ไขไม่พบสิ่งใด
อนุญาตพาธ import ที่ลงท้ายด้วย .ts (ต้องมี noEmit หรือ emitDeclarationOnly)