我在我的应用中使用一个抽象类作为父级React组件,一些子组件都继承自它。
它有一个默认状态和几个类方法,这些方法可以选择性地从扩展组件中重写。
这个抽象组件看起来像这样:
它有一个默认状态和几个类方法,这些方法可以选择性地从扩展组件中重写。
这个抽象组件看起来像这样:
import * as React from 'react';
export interface StatefulProps {
observers?: Array<(context: any, state: object) => any>;
}
export interface StatefulState {
machine: {
[propName: string]: any;
};
name: string;
value?: any;
}
export default abstract class StatefulComponent<P extends StatefulProps, S extends StatefulState> extends React.Component<P, S> {
static defaultProps = {
observers: [],
};
state = {
machine: {},
name: '',
};
abstract generateState(stateName: string, stateParam?: any): object;
shouldComponentUpdate(_: P, nextState: S) {
const { name } = this.state;
if (nextState && nextState.name !== name) {
return true;
}
return false;
}
goToState = (stateName: string, stateParam?: any) => {
const { observers } = this.props;
this.setState(
{
name: stateName,
machine: this.generateState(stateName, stateParam),
},
() => {
if (observers && observers.length) {
observers.forEach(observer => {
if (observer instanceof Function) {
observer(this, this.state);
}
});
}
}
);
}
}
然而,状态是被tslint强调的,在悬停时会显示以下错误:
Property 'state' in type 'StatefulComponent<P, S>' is not assignable to the same property in base type 'Component<P, S, any>'.
Type '{ machine: {}; name: string; }' is not assignable to type 'Readonly<S>'.
我真的想不通它为什么在抱怨……
我对TypeScript还比较新,所以我完全有可能在做事情的方式上犯了很低级的错误,但是任何建议或帮助都将不胜感激!