使用此代码:
else if (event.target.id == 'filter') {
this.setState({ [event.target.id]: event.target.value });
我得到这个类型脚本错误:
“{[x:number]:any;}”类型的ts2345 typescript(ts)参数不能分配给“{id:number;redirect:boolean;filter:string;player:player;}”((prevstate:reado…')”
但如果我这样做:
else if (event.target.id == 'filter') {
this.setState({ filter: event.target.value });
没有错误。尽管有错误,代码运行良好。我想这是从TypeScript2.9开始的。我知道我可以用第二个例子,但是我有其他代码,比如:
handleChange(event) {
if (event.target.type == 'checkbox') {
this.setState({ [event.target.id]: event.target.checked });
} else {
this.setState({ [event.target.id]: event.target.value });
}
}
这很有用。在TypeScript2.9中有更好的方法吗?
更新:同样相关:
type PlayerListState = {
id: number,
redirect: boolean,
filter: string,
player: GamePlayer
};
class PlayerListComponent extends React.Component<PlayerListProps, PlayerListState> {
以及react中setstate的类型定义:
setState<K extends keyof S>(
state: ((prevState: Readonly<S>, props: P) => (Pick<S, K> | S | null)) | (Pick<S, K> | S | null),
callback?: () => void
): void;