TypeScript
Public
TypeScript Discriminated Union Reducer
Model reducer actions safely with exhaustive TypeScript checking.
#typescript
#reducer
#state
#validation
TypeScript
type State = {
count: number;
label: string;
};
type Action =
| {
type: 'increment';
amount: number;
}
| {
type: 'rename';
label: string;
}
| {
type: 'reset';
};
export function reducer(
state: State,
action: Action,
): State {
switch (action.type) {
case 'increment':
return {
...state,
count: state.count + action.amount,
};
case 'rename':
return {
...state,
label: action.label,
};
case 'reset':
return {
count: 0,
label: '',
};
default: {
const exhaustiveCheck: never = action;
return exhaustiveCheck;
}
}
}