繁体   English   中英

我可以将 function(并获取其 ReturnType)传递给通用 TypeScript 类型吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM