我有一个State对象,该对象以天,小时和分钟为单位记录时间。我这样定义状态:
type StateKeys = "days" | "hours" | "minutes";
type State = {
[K in StateKeys]: number
};
稍后,我想根据控件中更改的值设置状态。有三个控件,一个控件用于一天,另一个控件用于小时,第三个控件用于分钟。我有一个处理程序函数与每个控件挂钩。这是该函数的摘录:
_onTimeComponentChange(e: any) {
const name : StateKeys = e.currentTarget.name;
const updatedValue = parseInt(e.currentTarget.value);
this.setState(
//@ts-ignore
{[name]: updatedValue},
() => {
this.updateValue();
}
)
}
我的目标是删除//@tsignore
评论。如果现在执行此操作,则会收到以下错误消息:
'{[x:string]:number;类型的参数}'不可分配给 'State |类型的参数(((prevState:只读,props: 只读)=>状态|选择)|挑'。输入'{[x:string]:数字; }'缺少 类型“选择”中的以下属性:天,小时, 分钟
如何删除//@tsignore
注释并满足打字稿的要求?
答案 0 :(得分:1)
在不进行强制转换的情况下解决此类问题绝对是困难的。您可以尝试按照here中所述的模式进行操作:
body > .google-auto-placed{
visibility: hidden;
display: none;
}
如下所示:
updateState(key: StateKeys, value: string) {
this.setState((prevState) => ({
...prevState,
[key]: value,
}));
}