形式的通用onChange处理程序的TS类型

时间:2019-04-25 13:44:07

标签: reactjs typescript typescript-typings

让我们跳过func声明,依此类推,我将为状态写当前类型,并声明状态本身

type BookFormState = {
  hasError: boolean;
}
BookForm<BookFormState> { ...
  state = {
   hasError: false
  };

然后在类中编写通用处理程序,并在组件中调用多个输入

onChange = (event: React.ChangeEvent<HTMLInputElement>):any => {
    this.setState({ [event.target.name]: event.target.value });
  };

<form>
// ... multiple inputs ...
   <BookInput name="UNIQUE_NAME" value={this.state[name]} onChange={this.onChange} />
</form>

在[event.target.name]:event.target.value行的onChange中出现错误

Argument of type '{ [x: string]: string; } is not assignable to parameter 
of type 'BookFormState | ((prevState: Readonly<BookFormState>, props:
 Readonly<BookFormProps>) => BookformState | Pick<BookFormState,
 "hasError"> | null) | Pick<BookFormState, "hasError"> | null'. 
Property "hasError", is missing in type {[x: string]: string;}, but
 required in type <PickrBookFormState, "hasError">.

所以我最终以的形式在<>中向组件提供BookFormState,并且我只以名字的形式列出了我所有的imputs [name]`s,并在道具中分别进行了处理。例如value = {this.state.title}。 但是我想那不是很好,但是它可以工作...

那么纠正上述关于{[x:string]:string;}的错误的正确类型是什么? TS只是不了解[event.target.name]:event.target.value

1 个答案:

答案 0 :(得分:0)

要处理ins="my * string" read -r -a array <<< "$ins" echo "${array[*]}" ,可以声明Property "hasError", is missing是可选的。您还应该包括hasError以及计划跟踪状态的其他任何输入值。

UNIQUE_NAME