Javascript Typescript React组件-执行redux属性类型以停止TS警告的正确方法

Javascript Typescript React组件-执行redux属性类型以停止TS警告的正确方法,javascript,reactjs,typescript,redux,Javascript,Reactjs,Typescript,Redux,如果您有一个React组件: interface Chat { someId: string; } export const Chat = (props: Chat) => {} 并且someId是在MapStateTrops中设置的: function mapStateToProps(state: State) { return { someId: state.someId || '' }; } 当我使用这个组件时 我不需要指定someId,因为它是由redux注

如果您有一个React组件:

interface Chat {
  someId: string;
}
export const Chat = (props: Chat) => {}
并且
someId
是在
MapStateTrops
中设置的:

function mapStateToProps(state: State) {
  return {
    someId: state.someId || ''
  };
}
当我使用这个组件时
我不需要指定
someId
,因为它是由redux注入的。但是,typescript抱怨
缺少以下属性类型“Chat”:“someId”

一个棘手的解决办法是将
someId
设置为可选:

interface Chat {
  someId?: string;
}
但这意味着您必须检查组件是否以某种方式存在于组件中


正确的方法是什么?

您可以为mapstate和mapdispatch定义接口。并使用
&
运算符获取组件道具类型

interface StateProps{
someId:字符串;
}
界面分派道具{
someDispatch:()=>void
}
类型Props=StateProps和DispatchProps
常量映射状态=(状态:状态)=>({
someId:state.someId | |”
})
常量映射分派={
someDispatch:()=>({type:'SOME_ACTION_type'})
}
const Chat=(props:props)=>{}
导出默认连接(
mapState,
地图发送
)(聊天)

您能否更新您的问题,以包括触发警告的
的实际使用情况,包括如何使用
MapStateTrops
?而不包括混乱的其他逻辑,这正是它的使用方式。在另一个功能组件的return语句中,在chat中,从存储中获取someId,并用于获取组件的一些数据。-如果您认为这会有所帮助,我将在中添加这一点-我希望这是一个使用react/redux解决的问题,我就是找不到,但如果
someId
是从Chat内的商店中获取的(换句话说,如果Chat是一个连接的组件),Chat不应该接受它作为一个道具。我同意这个理论——但如果我不将它定义为道具——我就无法在组件中访问它。它还有一个附带的好处,就是使类型更加清晰,并且不会重载一个界面,我总是发现这个界面很容易实现。在回答这个问题的同时加入反勾注释会很好-它们一起解决了问题并解释了原因:)请注意,我们特别推荐,部分原因是。