2017-08-28 51 views
0

在打字稿中,反应&redx,state参数的mapStateToProps函数连接方法声明为any如何使用接口代替函数中的任何类型参数

interface MapStateToProps<TStateProps, TOwnProps> { 
    (state: any, ownProps: TOwnProps): TStateProps; 
} 

我想用我的代码中定义的类型来代替状态参数的任何类型。我怎样才能做到这一点?

const mapStateToProps = (state: MyStateInterface) => {}; 

但是这不起作用,因为它不符合签名。

什么工作只有当我把它像这样:

const mapStateToProps = (state: any) => {}; 

但后来我失去我的IDE自动完成,并键入我的函数内部检查。

事实上,它是一个更多的打字稿问题,而不是一个打字问题。

当函数类型的参数为any参数时,如何在使用时指定参数的实际类型?

+0

不应它是'常量mapStateToProps:MyStateInterface =(状态)=>'?你正试图将函数值分配给不正确的状态参数。你可以定义一个状态接口,它包含你的reducer的返回值,如果你想把这个类型赋值给状态参数 –

+0

,实际上我需要输入函数的''''参数。 'MyStateInterface'是一个接口,描述了我在应用程序中的存储(它可以名称为'StoreInterface',我在这里将它命名为与redux接口声明相匹配) – Bouni

+0

不确定是什么意思?如果您有'combineReducers'的索引,则可以为该组合缩减器定义一个类型/接口,这就是状态值。让我写一个答案来帮助解释 –

回答

0

如果你有几个减速是做一些东西,然后你正在结合他们有像这样

export default combineReducers({ 
    user: userReducer, 
    something: someReducer 
}); 

一些特定的输出,其中userReducer这是

interface UserReducerState { 
    authenticated: boolean; 
    loading: boolean; 
    username: string; 
    email: string; 
} 
const defaultState = { 
    authenticated: false, 
    loading: false, 
    username: '', 
    email: '' 
}; 

export default (state: UserReducerState = defaultState, action: MyActionTypeInterface) => { 
    switch (action.type) { 
     case USER_LOADED: 
      return {...state, ...action.payload, ...{authenticated: true, loading: false}; 
     default: 
      return state; 
    } 
}; 

当你connect组件mapStateToProps函数将收到一个状态参数,其中有减速器值

interface ConnectStateProps { 
    user: UserReducerState; 
    something: SomethingReducerState 
} 
const mapStateToProps = (state: ConnectStateProps) => { 
    console.log(state); 
    ...etc 

此的console.log的输出是这样的

{ 
    user: { 
     authenticated: false, 
     loading: false, 
     username: '', 
     email: '' 
    }, 
    something: ...etc 
} 
+0

是的;我的问题是当我编写'ConnectStateProps'作为'mapStateToProps'函数的''''''参数的类型时(类似于你的例子),typescript告诉我它不匹配函数签名,并且期望param类型是'any ';像这样你的例子'const mapStateToProps =(state:any)' – Bouni

+0

@Bouni你可以为此创建一个jsfiddle吗?我现在使用这个确切的东西。没有多少我可以做的,以帮助当前的信息 –

+0

我发现我的错误,正如你所说earlues它是在返回类型不匹配不参数的类型。我误解了打字稿编译器的错误信息 – Bouni

相关问题