【发布时间】:2018-06-04 13:23:48
【问题描述】:
是否可以使用 TypeScript 获取函数参数的类型?
我有一个返回另一个函数的函数,该函数返回一个承诺:
type login = (params: LoginParams) => dispatched
type dispatched = (dispatch: Dispatch) => Promise<any>
我想创建一个泛型类型,它将函数作为参数并创建一个新的函数类型。例如:
GenericFunctionType<login>
将创建以下类型:
(LoginParams) => Promise<any>
简而言之,GenericFunctionType 使用初始函数的参数(登录)和返回函数的返回值(调度)创建一个函数类型。
我想要这个,因为我正在使用 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)
我正在尝试找到一种可重用的方式来键入已包装在 dispatch 中的动作创建者(这就是 connect 所做的)。
【问题讨论】:
-
我认为这是不可能的。类型不是数据,泛型类型不是返回其他类型的函数,也不是包含其参数的对象。看起来您实际上是在尝试导出两种类型。我建议将您的登录功能包装在一个模块中,该模块导出您的登录功能和两种类型,Params (loginParams) 和 Result (Promise
)。
标签: typescript redux