私はReactとReduxを使用していて、アクションタイプをインターフェースとして指定しているため、レデューサーはタグ付きユニオンタイプを利用してタイプセーフティを改善できます。
したがって、次のような型宣言があります。
interface AddTodoAction {
type: "ADD_TODO",
text: string
};
interface DeleteTodoAction {
type: "DELETE_TODO",
id: number
}
type TodoAction = AddTodoAction | DeleteTodoAction
これらのアクションを作成するヘルパー関数を作成したいと思います。これには、矢印関数を使用する傾向があります。これを書けば:
export const addTodo1 = (text: string) => ({
type: "ADD_TODO",
text
});
AddTodoAction戻り値の型が明示的に指定されていないため、コンパイラーはこれが有効であることを確認するのに役立つことはありません。これを行うことで、戻り値の型を明示的に指定できます。
export const addTodo2: (text: string) => AddTodoAction = (text: string) => ({
type: "ADD_TODO",
text
})
ただし、これには関数の引数を2回指定する必要があるため、冗長で読みにくくなります。
矢印表記を使用するときに戻り値の型を明示的に指定できる方法はありますか?
私はこれを試すことを考えました:
export const addTodo3 = (text: string) => <AddTodoAction>({
type: "ADD_TODO",
text
})
この場合、コンパイラーは戻り値の型を推測するようになりましたが、返すAddTodoActionオブジェクトに適切なフィールドがすべてあるかどうかは検証されません。
これを解決するには、別の関数構文に切り替えます。
export const addTodo4 = function(text: string): AddTodoAction {
return {
type: "ADD_TODO",
text
}
}
export function addTodo5(text: string): AddTodoAction {
return {
type: "ADD_TODO",
text
}
}
これらの方法のいずれかにより、コンパイラーは正しい戻り値の型を使用し、すべてのフィールドを適切に設定したことを強制しますが、これらはより冗長でありthis、関数での' 'の処理方法を変更します(これは問題ではないかもしれませんが、私は考えます。)
これを行う最善の方法についてアドバイスはありますか?
getTitle = ():string => 'State Lists'