Typescript - 获取typeof函数参数

时间:2017-12-21 20:20:15

标签: typescript redux

是否可以使用TypeScript获取函数参数的类型?

我有一个函数返回另一个返回promise的函数:

type login = (params: LoginParams) => dispatched
type dispatched = (dispatch: Dispatch) => Promise<any>

我想创建一个泛型类型,它将函数作为参数并创建一个新的函数类型。例如:

GenericFunctionType<login>

会创建以下类型:

(LoginParams) => Promise<any>

简而言之,GenericFunctionType创建一个函数类型,其中包含初始函数(login)的参数和返回函数的返回值(已调度)。

我想要这个因为我正在使用Redux。这是我的用例:

//Action Creator
export type login = (params: LoginParams) => ThunkAction<Promise<any>>;

export const login: login = params => async dispatch => {
  dispatch({ type: LOGIN });

  const promise = httpClient.post('/auth/sign_in', params);

  ...stuff

  return promise;
};

我的登录组件连接如下:

interface LoginProps {
  login: ???
}

class Login extends React.component<LoginProps, {}> {...}

connect(null, {login})(Login)

我正在尝试找到一种可重复使用的方式来键入已经包含在调度中的动作创建者(这是connect所做的)。

2 个答案:

答案 0 :(得分:3)

您可以使用npm的tsargs软件包。

您的情况:

input{
  text-security:disc !important;
  -webkit-text-security:disc !important;
  -moz-text-security:disc !important;
}

带有tsargs的示例:

import { Arg1 } from 'tsargs';

type GenericFunctionType<F extends Function> = (params: Arg1<F>) => Promise<any>;

答案 1 :(得分:2)

对于TypeScript 3.0

我们可以将函数参数类型作为元组类型,如下所示

type ArgsType<T> = T extends (...args: infer U) => any ? U : never;