在React中,组件定义大致如下:
我尝试了这个:
class Component<S> {
state:S;
setState(state:S):void;
}
你可以像这样定义组件:
interface MyState {
name: string;
age: number;
}
class MyComponent extends Component<MyState> { }
我现在遇到的问题是,在React API中,setState
应该使用一个部分状态对象进行调用,代表要更新的属性,例如:
setState({name: "Aaron"});
请注意,age
未被声明。 我面临的问题是TypeScript不允许这样做,它会给出类似于属性“age”缺失
的赋值错误。 就我所知,react.d.ts
定义在这方面是错误的。 但是有解决方案吗?我尝试了这个:
setState({name: "Aaron"} as MyState);
但是即使使用相同的代码,它仍然会产生错误,尽管在在线编辑器里却不会产生错误。为什么在线编辑器可以工作而本地构建出现错误?有任何想法吗?
Object.assign
部分类型可以工作(完全具备类型检查功能,而且无需创建带有可选成员的接口声明),但我仍然不确定如何实现。同样的代码在一个项目中可以工作,在另一个项目中却不能。一旦我弄清楚了,我会发布更新的。 - John Weisz