- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 Typescript 与 React 和 Redux 相结合。
但我现在很挣扎。
我遇到了这个错误:
./src/containers/Hello.tsx [tsl] ERROR in /home/marc/Development/TypeScript-React-Starter-master/src/containers/Hello.tsx(20,61) TS2345: Argument of type 'typeof Hello' is not assignable to parameter of type 'Component<{ enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }>'. Type 'typeof Hello' is not assignable to type 'ComponentClass<{ enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }>'. Type 'Hello' is not assignable to type 'Component<{ enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }, ComponentState>'. Types of property 'setState' are incompatible. Type '{ (f: (prevState: {}, props: Props) => Pick<{}, K>, callback?: (() => any) | undefined): void; (state: Pick<{}, K>, callback?: (() => any) | undefined): void; }' is not assignable to type '{ (f: (prevState: ComponentState, props: { enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }) => Pick, callback?: (() => any) | undefined): void; (state: Pick<...>, callback?: (() => any)...'. Types of parameters 'f' and 'f' are incompatible. Types of parameters 'props' and 'props' are incompatible. Type 'Props' is not assignable to type '{ enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }'. Type 'Props' is not assignable to type '{ onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }'. Types of property 'onIncrement' are incompatible. Type '(() => void) | undefined' is not assignable to type '() => IncrementEnthusiasm'. Type 'undefined' is not assignable to type '() => IncrementEnthusiasm'.
那是我的 React 组件:
import * as React from 'react';
import './Hello.css';
export interface Props {
name: string;
enthusiasmLevel: number;
onIncrement?: () => void;
onDecrement?: () => void;
}
class Hello extends React.Component<Props, {}> {
render(){
const { enthusiasmLevel, onIncrement, onDecrement } = this.props;
if (enthusiasmLevel <= 0) {
throw new Error('You could be a little more enthusiastic. :D');
}
return (
<div className="hello">
<div className="greeting">
Hello {name + getExclamationMarks(enthusiasmLevel)}
</div>
<div>
<button onClick={onDecrement}>-</button>
<button onClick={onIncrement}>+</button>
</div>
</div>
);
}
}
export default Hello;
// helpers
function getExclamationMarks(numChars: number) {
return Array(numChars + 1).join('!');
}
这是发生错误的文件:
import Hello from '../components/Hello';
import * as actions from '../actions/';
import { StoreState } from '../types/index';
import { connect, Dispatch } from 'react-redux';
export function mapStateToProps({ enthusiasmLevel, languageName }: StoreState) {
return {
enthusiasmLevel,
name: languageName,
};
}
export function mapDispatchToProps(dispatch: Dispatch<actions.EnthusiasmAction>) {
return {
onIncrement: () => dispatch(actions.incrementEnthusiasm()),
onDecrement: () => dispatch(actions.decrementEnthusiasm()),
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Hello);
StoreState 接口(interface):
export interface StoreState {
languageName: string;
enthusiasmLevel: number;
}
我不确定那有什么问题。唯一可行的解决方法是:
export default connect(mapStateToProps, mapDispatchToProps)(Hello as any);
在我看来这是一个丑陋的解决方案。
最佳答案
Props
接口(interface)的类型提示与 connect()()
预期的接口(interface)不完全匹配,如错误消息所示:
Type 'Hello' is not assignable to type 'Component<{ enthusiasmLevel: number; name: string; } & { onIncrement: () => IncrementEnthusiasm; onDecrement: () => DecrementEnthusiasm; }, ComponentState>'.
onIncrement
和 onDecrement
Prop 不能是可选的,并且onIncrement
和 onDecrement
Prop 不返回 void
但返回 IncrementEnthusiam
和 DecrementEnthusiam
分别。你的 Props
界面应该是这样的:
export interface Props {
name: string;
enthusiasmLevel: number;
onIncrement: () => IncrementEnthusiasm;
onDecrement: () => DecrementEnthusiasm;
}
关于javascript - 带有 Typescript 和 react-redux 的有状态组件 : Argument of type 'typeof MyClass' is not assignable to parameter of type Component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148861/
在学习 C++ 的过程中,我偶然发现了文章 Writing Copy Constructors and Assignment Operators它提出了一种机制来避免复制构造函数和赋值运算符之间的代码
显然,以这种方式实现基于类的实例方法是 JavaScript 中的一个习惯用法: function MyClass(){...} MyClass.prototype.methodA = functio
我尝试使用泛型为 NSManagedObject 的子类提供通用方法,但当 Swift 似乎无法找到/将泛型转换为具体类时,我收到错误: /// NSManagedObject+Helper.swif
有什么区别 MyClass mc = MyClass(); 和 MyClass mc; 在 C++ 中? 最佳答案 第一个调用复制构造函数,以临时对象作为参数 - MyClass() 创建临时对象。
考虑不涉及复制省略的情况(C++17 之前)。 来自 cppreference(再次假设 C++14): Temporary objects are created in the following
这里有一些代码: class MyClass { public: int y; }; int main() { MyClass item1; MyClass item2 = M
这种类型转换表达式之间有什么区别?什么是更好的? // One way var t:MyClass = MyClass(o); // Another var t:MyClass = o as MyCl
为了跟踪实例,我们有一个数组 MyClass[] mc = new MyClass[5]; 我想在构造函数调用本身期间保存在此数组中创建的 MyClass 实例。 类似这样的事情: public cl
我在对一个非常简单的类进行子类化时遇到问题,该类也有返回初始类的方法。 public class MyClass { public MyClass(){ } public MyC
我有一个 std::list在我的课上我有 myclass::operator bool PComp(const T * const & a, const T * const & b) { re
我正在编写一个简单的程序来计算面积,我得到的错误是: no matching function for call to 'myclass::myclass()' 我无法理解此错误的原因以及解决方法。
我希望我可以针对这个问题逐字发布我的项目,但我不能。 基本上,我有以下类(class): class Lowest { someValue: string constructo
为什么可以施放MyClass反对 List没有编译错误(只是有“未检查”警告),尽管 MyClass未实现 List 接口(interface),同时无法进行强制转换,例如 String类同样的方式。
我正在这里试验一下。 假设我有一个类: static class MyClass { static String property = "myProperty"; } 和一个方法: publi
我正在尝试为单元测试目的创建一个 stub 类。 Stub 指向完全相同的 EmployeeData 类定义,但编译器认为它们是不同的,不知何故。结果,我不断收到以下消息: Cannot implic
为什么我不能通过 Point src[1][4] = { { Point(border,border), Point(border,h-border),
我有一个正在创建的模板类,我需要一个方法来返回该类的对象并对其进行分配。我有一个方法接收 2 个对象、创建一个新对象并返回它,以及重载赋值运算符以正确复制成员。 我试过用两种方法来做到这一点(两种方法
在 C# 中是否可以在运行时创建一个类型,该类型继承自泛型类,其中基类的模板参数是正在构造的当前类?这将编译正常: // I have this class: public class OtherCl
我有几个带有“listingThumb”类的 div CSS: .listingThumb{ height:50px; width:50px; overflow:hidden; } HTML: 我希
例如,我有一个包含不同容器的类来保存由 new 运算符创建的 MyClass 对象: class A{ MyClass* m; vector vm; vector > vvm;
我是一名优秀的程序员,十分优秀!