I am using React and Redux and have action types specified as interfaces, so that my reducers can take advantage of tagged union types for improved type safety.

So, I have type declarations that look like this:

```
interface AddTodoAction {
    type: "ADD_TODO",
    text: string
};

interface DeleteTodoAction {
    type: "DELETE_TODO",
    id: number
}

type TodoAction = AddTodoAction | DeleteTodoAction

```

I'd like to make helper functions that create these actions, and I tend to use arrow functions for this. If I write this:

```
export const addTodo1 = (text: string) => ({
    type: "ADD_TODO",
    text
});

```

The compiler can't provide any help in making sure this is a valid `AddTodoAction` because the return type isn't specified explicitly. I can specify the return type explicitly by doing this:

```
export const addTodo2: (text: string) => AddTodoAction = (text: string) => ({
    type: "ADD_TODO",
    text
})

```

But this requires specifying my function arguments twice, so it's verbose and harder to read.

Is there a way I can specify the return type explicitly when using arrow notation?

I've thought of trying this:

```
export const addTodo3 = (text: string) => <AddTodoAction>({
    type: "ADD_TODO",
    text
})

```

In this case, the compiler now infers the return type as `AddTodoAction` but it's doesn't validate that the object I'm returning has all of the appropriate fields.

I could solve this by switching to a different function syntax:

```
export const addTodo4 = function(text: string): AddTodoAction {
    return {
        type: "ADD_TODO",
        text
    }
}

export function addTodo5(text: string): AddTodoAction {
    return {
        type: "ADD_TODO",
        text
    }
}

```

Either of these methods will cause the compiler to use the correct return type and enforce that I have set all fields appropriately, but they are also more verbose and they change the way '`this`' is handled in a function (which may not be an issue, I suppose.)

Is there any advice about the best way to do this?