类型 - TypeScript上不存在属性

时间:2018-03-08 17:11:12

标签: javascript reactjs typescript

创建自定义Form组件,当子输入发生变化时,该组件应更改其data

长话短说:

enter image description here

在当前上下文中currentTarget是表单,target是触发事件的输入。 target正是我所需要的 - 因为我可以更新数据:

this.setState({
  data: {
    [e.target.name]: e.target.value
  }
});

有什么想法吗?

  • 错误的事件类型?
  • 任何使用TypeScript进行投射的方法(已经尝试过)?
  • 错误的做法?

编辑:类似这样的作品,但这是错误的:

handleChange(e:React.FormEvent){     让foo:any = e;     this.setState({       数据:{         [foo.target.name]:foo.target.value       }     });   }

3 个答案:

答案 0 :(得分:1)

经过一些实验:

handleChange(e: React.FormEvent<HTMLFormElement>) { let name: string = (e.target as HTMLFormElement).name; let value: string = (e.target as HTMLFormElement).value; this.setState({ data: { [name]: value } });

这是有道理的,因为在这种情况下,HTMLInputElementtarget)被访问为HTMLFormElement(听众)。

可能有更优雅的解决方案,但这种方法有效。

答案 1 :(得分:0)

如何调用函数handleChange?

我猜你做的是这样的事情:

onChange={this.handleChange()}

但你必须这样做:

onChange={this.handleChange)}

实际上,你必须传递函数的引用,而不是调用函数

答案 2 :(得分:0)

将参数更改为handleChange(e: React.FormEvent<HTMLFormElement>)并使用e.currentTarget.name

@thurt解释了为什么在related SO question中,我还在类型定义文件here中找到了一些有用的注释。