Typescript 从createSelector工厂推断返回类型
我正在尝试将reselect集成到一些redux连接的组件中。根据重新选择()的文档,在处理传入的道具时,为了确保选择器被正确地记忆,您基本上为Typescript 从createSelector工厂推断返回类型,typescript,redux,reselect,Typescript,Redux,Reselect,我正在尝试将reselect集成到一些redux连接的组件中。根据重新选择()的文档,在处理传入的道具时,为了确保选择器被正确地记忆,您基本上为createSelector创建了一个工厂函数,因此调用connect()的每个组件都会获得自己的选择器及其记忆状态。这是有道理的,而且我使用的是TypeScript: 界面上传ProfileOwnProps{ someValue:字符串; } const getUploadProfile=(state:AppState,props:UploadProf
createSelector
创建了一个工厂函数,因此调用connect()
的每个组件都会获得自己的选择器及其记忆状态。这是有道理的,而且我使用的是TypeScript:
界面上传ProfileOwnProps{
someValue:字符串;
}
const getUploadProfile=(state:AppState,props:UploadProfileOwnProps):UploadProfileState=>state.uploadProfile;
const getCustomer=(state:AppState,props:UploadProfileOwnProps):CustomerState=>state.customer;
const UploadProfileSelector工厂=()=>createSelector(getCustomer,getUploadProfile,
(customerState,profile)=>({
customerId:customerState.customerId,
轮廓
}));
类型uploadProfileSelectorProps=ReturnType;
const connectUploadProfile=connect(()=>{
常量选择器=uploadProfileSelectorFactory();
常量mapStateToProps=(状态:AppState,道具:UploadProfileOwnProps):uploadProfileSelectorProps=>{
返回选择器(状态、道具);
};
返回MapStateTops;
},上载操作);
OwnProps
只是一个占位符,在这种情况下,状态根本不依赖于它,但在其他情况下可能依赖于它。doubleReturnType
构造让我有点烦,但它完成了任务。现在,实际问题是:
uploadProfileSelectorFactory
缺少显式返回类型。在这种情况下,我让eslint对我大喊大叫。我如何说服TypeScript告诉它工厂函数的返回类型是createSelector()
返回的类型?它确实正确地推断了返回类型,因此它不会导致eslint之外的任何问题。我看到一些选择:
CreateSelector
的类型,在这种情况下,这将是一个相当混乱的outputParameterSelector T>
,如果添加另一个选择器,我必须记住要更改它createSelector()
,而不实际调用它。这可以通过显式定义组合器函数的返回类型来完成,尽管我还没有尝试过。这可能也会消除ReturnType
业务,代价是让我保持组合器函数及其返回类型的同步重新选择
或类似内容加入到混合中,希望不会出现此问题createSelector
返回什么,因为最终它只是一个选择器,选择customerId
和配置文件
。通过重新选择创建的选择器必须具有额外的属性,如重新计算
和重置重新计算
,但这些对于react redux来说并不重要。我们只想知道选择器接受什么参数以及返回什么
这是您正在选择的内容:
type Selected = UploadProfileState & Pick<CustomerState, 'customerId'>
但这是一个冗长的过程,我们在多个地方有相同的两个参数,因此,如果您想定义一个帮助器类型:
type UploadProfileSelector<Return> = (state: AppState, props: UploadProfileOwnProps) => Return;
type UploadProfileSelector=(state:AppState,props:UploadProfileOwnProps)=>返回;
或者更广义地说:
type ComponentSelector<Props, Return> = (state: AppState, props: Props) => Return;
type UploadProfileSelector<Return> = ComponentSelector<UploadProfileOwnProps, Return>;
type ComponentSelector=(state:AppState,props:props)=>Return;
类型UploadProfileSelector=ComponentSelector;
您可以将其用作返回类型:
const uploadProfileSelectorFactory = (): UploadProfileSelector<Selected> =>
const UploadProfileSelector工厂=():UploadProfileSelector=>
您确实知道createSelector
返回的内容,因为最终它只是一个选择器,用于选择customerId
和profile
。通过重新选择创建的选择器必须具有额外的属性,如重新计算
和重置重新计算
,但这些对于react redux来说并不重要。我们只想知道选择器接受什么参数以及返回什么
这是您正在选择的内容:
type Selected = UploadProfileState & Pick<CustomerState, 'customerId'>
但这是一个冗长的过程,我们在多个地方有相同的两个参数,因此,如果您想定义一个帮助器类型:
type UploadProfileSelector<Return> = (state: AppState, props: UploadProfileOwnProps) => Return;
type UploadProfileSelector=(state:AppState,props:UploadProfileOwnProps)=>返回;
或者更广义地说:
type ComponentSelector<Props, Return> = (state: AppState, props: Props) => Return;
type UploadProfileSelector<Return> = ComponentSelector<UploadProfileOwnProps, Return>;
type ComponentSelector=(state:AppState,props:props)=>Return;
类型UploadProfileSelector=ComponentSelector;
您可以将其用作返回类型:
const uploadProfileSelectorFactory = (): UploadProfileSelector<Selected> =>
const UploadProfileSelector工厂=():UploadProfileSelector=>