将setState与typescript一起使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将setState与typescript一起使用相关的知识,希望对你有一定的参考价值。

我不明白错误但我似乎无法像往常一样使用setState。

这是我得到的错误:类型'{[x:number]:any; }'不能赋值给'IState |类型的参数((prevState:Readonly,props:Readonly)=> IState | Pick | null)|选择|空值'。类型'{[x:number]中缺少属性'inputField':any; ''但需要'Pick'.ts类型(2345)

interface IState {
  inputField: string;
}

interface IProps {}

export default class Input extends React.Component<IProps, IState> {
  state: IState = {
    inputField: '',
  };

  handleChange = (e: React.FocusEvent<htmlInputElement>) => {
    const {name, value}: any = e.target;
    this.setState({
      [name]: value
    });
  };

  render() {
    const {inputField} = this.state;

    return (
      <input type="text" name="inputField" value={inputField} onChange={this.handleChange} />
    );
  };
}
答案

我想这就是声明你的IState接口的全部意义 - 所以Typescript可以检查你是否用正确的类型设置了正确的属性。

所以基本上你试图设置一个不可知的(在编译时)属性([name]),并且typescript编译器告诉你它无法运行该函数,因为它缺少预期的inputField属性。

您可能需要将所有有效属性添加到IState接口并使用setState中的属性名称。

以上是关于将setState与typescript一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 usestate 和 setstate 而不是 this.setState 使用 react 和 typescript?

将 Rewire 与 TypeScript 一起使用

将 Nodejs 与 Typescript 一起使用

将 typescript 与 Babel 7 Standalone 一起使用

将 Typescript 2 @Types 与 typescript 1.8.10 一起使用

如何将命名空间与 TypeScript 外部模块一起使用?