*Info:*
*Using Typescript 3.3.3333 in Jetbrains Rider*

Given this type definition of `Reducer<State, Action>`:

```
* @template S The type of state consumed and produced by this reducer.
* @template A The type of actions the reducer can potentially respond to.
*/
export type Reducer<S = any, A extends Action = AnyAction> = (
  state: S | undefined,
  action: A
) => S

```

Why will the return type of `S` not type check the state I am returning from the reducer, unless I define it explicitly?

```
export const INITIAL_STATE: AuthenticationState = {
    authenticationInProgress: false,
    accessToken: null,
    tokenType: null,
    expiryTimeMs: null,
    errorInformation: null,
    isAdmin: false,
};

export const authenticationReducer: Reducer<AuthenticationState, 
    AuthenticationActions> = (state = INITIAL_STATE, action): 
(why is this necessary??) ->  AuthenticationState => {
        switch (action.type) {
            case "authentication/user_authentication_request": {
                return {
                    ...state,
    problem -> hello: "hi",
                    authenticationInProgress: true,
                };
            }
...

```

**Behavior I expect without needing to define AuthenticationState as the return value**
[![Behavior I expect without needing to define AuthenticationState as the return value](https://i.stack.imgur.com/NQbOo.png)](https://i.stack.imgur.com/NQbOo.png)

VS.

**Why is there no more type checking on the return value if the Reducer Type includes the return value of S?**
[![Why is there no more type checking for the return value is the Reducer<S, A> Type includes the return value of S](https://i.stack.imgur.com/mE5Qd.png)](https://i.stack.imgur.com/mE5Qd.png)

Any light shedding and wisdom is really welcome. Thanks in advance.