我正在使用Redux,redux-thunk编写应用程序,然后在TypeScript中重新选择。
在许多地方,我正在编写如下函数:
const selectThing = (store: IStore) => store.path.to.thing;
const fetchThing = (thingId: string) => (dispatch: Dispatch<IStore>, getState: () => IStore) => {
// fetch a thing by id and handle the result
return result;
}
特别是在第二个示例中,第二个函数的键入注释会占用很多空间,我想编写一个处理参数键入的函数接口。
type StoreSelector<T = any> = (store: IStore) => T;
type ThunkDispatch<T = any> = (dispatch: Dispatch<IStore>, getState: () => IStore) => T;
上面的键入解决了每次都必须手动键入参数的问题,但是它们将要求我手动键入函数的返回值,该函数以前自动工作。
是否可以键入函数的参数,但是让typescript然后自动检测函数体的返回值?
答案 0 :(得分:2)
您可以使用函数来获取返回类型的推论和参数类型的推论。
function createThunkDispatch<T>(fn: (dispatch: Dispatch<IStore>, getState: () => IStore) => T) {
return fn;
}
// const fetchThing: (thingId: string) => (dispatch: Dispatch<IStore>, getState: () => IStore) => string
const fetchThing = (thingId: string) => createThunkDispatch((dispatch, getState) => {
// fetch a thing by id and handle the result
return "result";
});