[英]Generic TypeScript Type for functions returning functions that replaces the ReturnType with the ReturnType of the returned function
[英]Can I pass a function (and get its ReturnType) to a generic TypeScript type?
所以我的代码如下。 理想情况下,我想实现以下类型: LoginPayload<login>
。
我无法弄清楚将任何 function 作为通用参数传递并获取其返回类型的构造。
export type LoginPayload = ReturnType<typeof login>
const login = createAction('customer/login', function prepare({ username, password }: LoginRequest) {
return { payload: { username, password } }
})
我想达到的目标:
export type LoginPayload<F> = ReturnType<typeof F>
const login = createAction('customer/login', function prepare({ username, password }: LoginRequest) {
return { payload: { username, password } }
})
//use: LoginPayload<login>
任何帮助深表感谢。
不确定,如果这就是你想要的,但我会试一试:
假设您使用redux-actions
package, login
的返回类型(通过调用createAction
创建的 function )将是Action<Payload>
。 Payload
是一个类型参数,它是从传入的回调prepare
的返回类型推断出来的。
动作(来自 redux-actions):
export interface BaseAction {
type: string;
}
export interface Action<Payload> extends BaseAction {
payload?: Payload;
error?: boolean;
}
如果您不能为prepare
回调返回类型使用显式的已知类型,则可以像这样推断Payload
(在示例中假设 user + pw 的string
类型):
type InferPayload<T> = T extends Action<infer I> ? I : never
/*
type Payload = {
payload: {
username: string;
password: string;
};
}
*/
type Payload = InferPayload<ReturnType<typeof login>>
所以总而言之Action<Payload>
将具有这种类型:
{
payload?: {
payload: {
username: string;
password: string;
};
} | undefined;
error?: boolean | undefined;
type: string;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.