@typescript-eslint/switch-exhaustiveness-check
要求switch语句对于联合类型中值的判断是详尽无遗的。
当switch语句中的判断条件是字面量值的集合或者是一个枚举类型,如果case语句中缺少任何一个值的判断,并且没有default语句时,此规则会告警。
规则配置
// code-linter.json5
{
"rules": {
"@typescript-eslint/switch-exhaustiveness-check": "error"
}
}
选项
详情请参考@typescript-eslint/switch-exhaustiveness-check选项。
正例
type Day =
| 'Monday'
| 'Tuesday'
| 'Wednesday'
| 'Thursday'
| 'Friday'
| 'Saturday'
| 'Sunday';
declare const day1: Day;
let result = '0';
switch (day1) {
case 'Monday':
result = '1';
break;
case 'Tuesday':
result = '2';
break;
case 'Wednesday':
result = '3';
break;
case 'Thursday':
result = '4';
break;
case 'Friday':
result = '5';
break;
case 'Saturday':
result = '6';
break;
case 'Sunday':
result = '7';
break;
}
declare const day2: Day;
result = '0';
switch (day2) {
case 'Monday':
result = '1';
break;
default:
result = '42';
}
console.info(result);
enum Fruit {
apple = 'apple',
banana = 'banana',
cherry = 'cherry'
}
declare const fruit: Fruit;
switch (fruit) {
case Fruit.apple:
console.log('an apple');
break;
case Fruit.banana:
console.log('a banana');
break;
case Fruit.cherry:
console.log('a cherry');
break;
}
反例
type Day =
| 'Monday'
| 'Tuesday'
| 'Wednesday'
| 'Thursday'
| 'Friday'
| 'Saturday'
| 'Sunday';
declare const day: Day;
let result = '0';
switch (day) {
// 只处理了'Monday',缺少其他值的判断,并且也没有default分支
case 'Monday':
result = '1';
break;
}
console.info(result);
规则集
plugin:@typescript-eslint/all
Code Linter代码检查规则的配置指导请参考Code Linter代码检查。