在TypeScript中,如何键入函数的参数而不是返回值?

时间:2018-10-15 08:39:44

标签: typescript redux redux-thunk reselect

我正在使用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然后自动检测函数体的返回值?

1 个答案:

答案 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";
});