| ความเข้มงวด |
|---|
| สวิตช์หลัก: เปิด 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) |