基于生成器函数的返回类型在TypeScript中声明类型

基于生成器函数的返回类型在TypeScript中声明类型,typescript,react-redux,typescript-typings,Typescript,React Redux,Typescript Typings,这就是我使用ActionCreater及其类型定义动作的方式 const listRequestAction = new ActionCreator<undefined, undefined>( REQUEST_LIST ); type listRequestActionType = ReturnType< typeof listRequestAction.create >; const

这就是我使用ActionCreater及其类型定义动作的方式

   const listRequestAction = new ActionCreator<undefined, undefined>(
        REQUEST_LIST
      );
    
   type listRequestActionType = ReturnType<
        typeof listRequestAction.create
        >;
const listRequestAction=new ActionCreator(
请求列表
);
类型listRequestActionType=ReturnType<
listRequestAction.create的类型
>;
我想给我的动作添加一个动态名称空间,所以我对动作做了这个更改

       const listRequestAction = (namespace: string) => 
          new ActionCreator<undefined, undefined>(
            `${namespace}${REQUEST_LIST}`
          );
const listRequestAction=(名称空间:字符串)=>
新ActionCreator(
`${namespace}${REQUEST\u LIST}`
);

如何重新定义listRequestActionType以支持名称空间更改?

这仅在TS 4.2及更高版本中可能。()

。不过似乎有点冗长。请随意重构它

// Is this the correct reference? https://github.com/cameronmaske/react-redux-typescript
class ActionCreator<T, P> {
    readonly type: T;

    constructor(type: T) { this.type = type; }
    create = (payload: P) => ({ type: this.type, payload });
}


// I assume `REQUEST_LIST` is a string constant?
const REQUEST_LIST: "REQUEST_LIST" = "REQUEST_LIST"


const listRequestAction = <P, Namespace extends string>(
    namespace: Namespace
    ): ActionCreator<`${Namespace}${typeof REQUEST_LIST}`, P> =>
        new ActionCreator(
            `${namespace}${REQUEST_LIST}` as `${Namespace}${typeof REQUEST_LIST}`
        )

type listRequestActionType<P, Namespace extends string> = ReturnType<
    ActionCreator<`${Namespace}${typeof REQUEST_LIST}`, P>["create"]
>;
//这是正确的引用吗?https://github.com/cameronmaske/react-redux-typescript
类ActionCreator{
只读类型:T;
构造函数(类型:T){this.type=type;}
create=(payload:P)=>({type:this.type,payload});
}
//我假设'REQUEST_LIST'是一个字符串常量?
常量请求列表:“请求列表”=“请求列表”
常量listRequestAction=(
名称空间:名称空间
):ActionCreator=>
新ActionCreator(
`${namespace}${REQUEST_LIST}`作为`${namespace}${typeof REQUEST_LIST}`
)
类型listRequestActionType=ReturnType<
ActionCreator[“创建”]
>;

请分享可复制的示例