TypeScript - กฎ ESLint สำหรับการไม่ใช้ enum ที่ไม่ได้ใช้งาน
มีกฎ no-unused-vars ของ eslint ที่สามารถแจ้งเตือน/แสดงข้อผิดพลาดหากมีตัวแปรที่ไม่ได้ใช้งาน: https://eslint.org/docs/rules/no-unused-vars
ถ้าฉันต้องการตรวจสอบให้แน่ใจว่าไม่มี enums ที่ไม่ได้ใช้งาน กฎ lint ที่ดีที่สุดในการใช้งานคืออะไร?
ตัวอย่างสถานการณ์:
export enum MyEnum {
ONE = 'ONE',
TWO = 'TWO',
THREE = 'THREE',
}
ที่นี่ MyEnum.ONE และ MyEnum.TWO ถูกใช้ทั้งคู่ แต่ MyEnum.THREE ไม่ได้ถูกอ้างอิง
if (type === MyEnum.ONE) {
...
}
if (type === MyEnum.TWO) {
...
}
มันคงดีมากถ้ากฎการตรวจสอบโค้ดสามารถแจ้งเตือน/แสดงข้อผิดพลาดว่า MyEnum.THREE ไม่ถูกใช้งาน เพื่อที่จะสามารถลบมันได้
คำตอบ #1
ไม่มีข้อกำหนดที่มีอยู่สำหรับการทำเช่นนี้ ดังนั้นคุณจึงมีตัวเลือกสองสามข้อ:
- เขียนกฎของคุณเอง (แล้วเผยแพร่มันให้พวกเราที่เหลือใช้!)
- ถ้าคุณใช้ IntelliJ จะมีการตรวจสอบใน IDE ("สัญลักษณ์ทั่วโลกที่ไม่ได้ใช้งาน") ที่สามารถให้คำเตือนคุณได้
อย่างไรก็ดี ให้แน่ใจว่าคุณกำลังใช้เวอร์ชัน Typescript ของกฎ no-unused-vars แม้ว่าจะเป็นเช่นนั้น มันก็ยังไม่ตรวจพบตัวแปรที่ส่งออกแล้วไม่ได้ใช้งานเพราะแต่ละไฟล์ถูกวิเคราะห์แยกกัน
คำตอบ #2
ตอบคำถามของตัวเองทีหลังที่นี่ ผมพบว่าการใช้สวิตช์อย่างละเอียดในโค้ดและ "การตรวจสอบความครบถ้วนของสวิตช์" เป็นรูปแบบที่ยั่งยืนที่สุด
https://typescript-eslint.io/rules/switch-exhaustiveness-check/
พิจารณาเพิ่มสิ่งนี้ลงใน eslintrc ของคุณ (เช่น .eslintrc.js ของฉัน)
// Exhaustive switches
'@typescript-eslint/switch-exhaustiveness-check': [
'warn',
{ allowDefaultCaseForExhaustiveSwitch: false },
],
ดังนั้นทุกครั้งที่คุณใช้ enums คุณต้องใช้คำสั่ง switch หากคุณเพียงแค่เขียนบรรทัดแรกของ switch ที่ value เป็น MyEnum,
switch (value) {
eslint แสดง
Switch is not exhaustive. Cases not matched: etc... eslint@typescript-eslint/switch-exhaustiveness-check
สิ่งที่ดีที่สุดคือ VSCode มี "การแก้ไขด่วน" ที่สร้างกรณีทั้งหมด ในขณะที่การเพิ่มกรณีสำหรับแต่ละ enum อาจจะน่าเบื่อเล็กน้อย แต่ฉันพบว่ารหัสที่ใช้ default มักสร้างบั๊กที่ยากต่อการค้นหา มันยังมีประโยชน์ในการแนะนำผู้พัฒนารายใหม่เมื่อพวกเขานำค่า enum ใหม่ไปใช้งาน เพราะสวิตช์ทั้งหมดในรีโปจะต้องปรับแก้ lint
และเพื่อตอบคำถามต้นฉบับนี้ กลยุทธ์สวิตช์แบบครบถ้วนยังช่วยให้สามารถค้นหาและลบเส้นทางโค้ดที่ตายแล้วได้ง่ายเนื่องจากทุก enum ต้องถูกใช้งาน
