There is no major difference in this case. Although the first version can be simplified to
export const registerTubesReducer = (previousState: ITubes, action: TubeAction): ITubes => { ... }
Differences to be aware of between arrow and regular functions.
1) Arrow functions have a lexically bound this which does not change depending on how you invoke the function
2) Arrow functions are not hoisted as they are just variable declarations with a function value. You will not be able to use the function until it is defined or else you will be calling and undefined variable
arrowAdd(1, 2) // arrowAdd will be undefined here
functionAdd(1,2) // All good since function declarations are hoisted
const arrowAdd = (a: number, b: number) => a + b
function functionAdd(a: number, b:number) {
return a + b
}
3) Arrow functions allow you to omit the extra curly braces if you only want to return a value
There is a canonical answer here for more details about the differences between arrow and regular functions