Tags
Typescript
Project date
December 13, 2022
Created
Dec 13, 2022 7:15 AM
В TypeScript’e мы можем защититься от того, что в switch-case попадет значение, которое мы забыли обработать.
export const switchSafeGuard = (arg: never): never => {
throw new Error('Safe guard executed on value:' + arg);
};
Пример использования:
type Role = 'admin' | 'user' | 'moderator';
const role: Role = 'admin';
switch (role) {
case 'admin':
console.log('i am admin');
break;
case 'user':
console.log('i am user');
break;
default:
return switchSafeGuard(role);
/**
* Error here Argument of type 'Role'
* is not assignable to parameter of type 'never'
**/
}
При добавлении, новой роли данный кусок кода перестанет компилироваться, так как данная логика предполагает, что safeGuard будет недостижим из-за переменной arg типа never, и потребует добавления нового обработчика case для новой роли.
type Role = 'admin' | 'user' | 'moderator';
const role: Role = 'admin';
switch (role) {
case 'admin':
console.log('i am admin');
break;
case 'moderator':
case 'user':
console.log('i am user');
break;
default:
return switchSafeGuard(role);
/**
* No error now
**/
}
Больше прочитать про never можно тут: