跳到主要内容

@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代码检查