我正在尝试将React-redux与Typescript一起使用,当我尝试使用connect()和mapStateToProps注入道具时遇到类型错误。
我的组件如下所示:
function mapStateToProps(state) {
return {
counter: state.counter
};
}
function mapDispatchToProps(dispatch) {
return {
incr: () => {
dispatch({type: 'INCR', by: 2});
},
decr: () => {
dispatch({type: 'INCR', by: -1});
}
};
}
export default class Counter extends React.Component<HelloProps, any> {
render() {
return (
<div>
<p>
<label>Counter: </label>
<b>#{this.props.counter}</b>
</p>
<button onClick={e => this.props.incr() }>INCREMENT</button>
<span style={{ padding: "0 5px" }}/>
<button onClick={e => this.props.decr() }>DECREMENT</button>
);
}
}
export default connect(mapStateToProps, mapDispatchToProps)(Counter);
商店看起来像这样
let store = createStore(
(state:HelloState, action:HelloAction) => {
switch (action.type) {
case 'INCR':
return {counter: state.counter + action.by};
default:
return state;
}
},
最后,我将类型定义为:
interface HelloProps {
counter?: number;
incr?: () => any;
decr?: () => any;
}
interface HelloState {
counter:number;
}
interface HelloAction {
type:string,
by:number;
}
当我尝试编译代码时,出现以下错误:
(39,61): error TS2345: Argument of type 'typeof Counter' is not assignable to parameter of type 'ComponentClass<{ counter: any; } & { incr: () => void; decr: () => void; }> | StatelessComponent<...'.
Type 'typeof Counter' is not assignable to type 'StatelessComponent<{ counter: any; } & { incr: () => void; decr: () => void; }>'.
Type 'typeof Counter' provides no match for the signature '(props?: { counter: any; } & { incr: () => void; decr: () => void; }, context?: any): ReactElement<any>'
有趣的是,即使代码抛出类型错误,它仍然可以正常工作。同样,将组件的prop接口更改为any也可以解决该问题。似乎类型系统无法理解这两个映射功能将两个对象合并在一起。
我在有关Github
问题的倒数第二篇文章中找到了答案。如果mapStateToProps
and和/或mapDispatchToProps
or
上都没有type参数,connect
则会产生两个map函数的返回类型的交集。
我有一个通过http承载图像的地理服务器。我的客户端站点使用https。我一直在使用openlayers,一切都很好。现在我正试图转移到cesiumjs,我在IE或Edge中没有得到任何图像(不幸的是,我无法测试其他浏览器)。如果使用bing地图,我可以在我的客户机中获取图像,因此客户机代码在其他情况下是可用的。在浏览器控制台中,我看到: SEC7117:网络请求超文本传输协议://[myserv
在嵌入式TomEE容器中运行Arquillian测试时,我得到了以下错误
我试图映射到道具的行动,但我得到一个错误:类型错误:_this2.props.updateUsername不是一个函数 如何成功地将redux操作映射到props并成功调用函数?我在任何其他stackoverflow问题/答案中都没有看到这个错误弹出,这是一个简单的错误吗?会不会是在. index或. app中对redux的设置错误? 我试过:-不使用默认导出导入-有不同格式的mapDispatc
问题内容: 使用React Router v4开发React应用程序。一切顺利,直到我在应用程序中引入了Redux。从那时起,单击更改路径的链接时,浏览器url发生更改,但是未加载与该路径相对应的组件。如果我注释掉Redux代码,它会很好地工作。是什么原因造成的?这是我的路由代码: PS:控制台没有错误。代码运行干净,只是组件没有加载。这是github上的类似线程:4671。我在各种站点上看到了很
问题内容: 给定以下使用泛型类型参数的类型化React组件,我该如何将其包装在React的新API中? 上面的方法无法定义泛型。 问题答案: 因此,为了扩大问题范围,这实际上是关于在更高阶函数中保留泛型类型的问题。的以下用法将正确类型检查(在中) 但是,泛型会立即解析为,而不是保留为泛型。因此,以下内容不会进行类型检查 在此Typescript发行凭单中跟踪了相关的发行。
我是Typscript 2的新手。我想做的是在typescript中使用jQuery。在这个问题中,我读到你需要两件事: 这将安装包“@types/jquery 2.0.39”。 然后,在打字稿文件中,我把这个: 但是我收到打字稿错误“找不到模块'jquery'。我做错了什么? 与相同的错误 完整类型脚本文件: