如何将打字稿与动态对象键一起使用

时间:2019-04-01 23:27:07

标签: reactjs typescript

我有一个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注释并满足打字稿的要求?

1 个答案:

答案 0 :(得分:1)

在不进行强制转换的情况下解决此类问题绝对是困难的。您可以尝试按照here中所述的模式进行操作:

body > .google-auto-placed{
    visibility: hidden;
    display: none;
}

如下所示:

updateState(key: StateKeys, value: string) {
  this.setState((prevState) => ({
    ...prevState,
    [key]: value,
  }));
}