当前位置: 首页 > 面试题库 >

React + Typescript:如何输入event.target.name来声明?

孟昆
2023-03-14
问题内容

我有被定义为接口的som react状态,并且具有特定的所有命名键…

我在下面尝试了一种解决方案,该解决方案应在技术上基于状态键起作用,但仍然会给我错误

{ [x: string]: string; }' provides no match for the signature  ...

做这个的最好方式是什么…

interface State {
    responses: string,
    comments: string,
}


  state = {
    responses: '',
    comments: '',
  };

  handleChange = (e: React.ChangeEvent<HTMLInputElement>, value: string): void => {
    const key = e.currentTarget.name;
    Object.keys(this.state).forEach(k => {
      if (k === key) this.setState({ [e.currentTarget.name]: value });
    })
  }

问题答案:

的返回类型Object.keys()是通用的,string[]而不是对象键的并集的数组,因此在此处推断正确的类型可能很棘手。而且,根据我的经验,当发布较新版本的TypeScript或程序包类型定义时,智能解决方案往往会崩溃,因此在这种情况下,我将帮助TypeScript在以下参数上签名setState

handleChange = (e: React.ChangeEvent<HTMLInputElement>, value: string): void => {
  const key = e.currentTarget.name;

  if (Object.keys(this.state).includes(key)) {
    this.setState({[key]: value } as Pick<State, keyof State>);
  }
}


 类似资料:
  • 这应该是非常基本的,但我无法通过它。 我有一门课,比如: 然后在HTML中, 我想使用myValue和myUnit创建一个“MyObject”类的对象。我该怎么做? 比如: 不能用上面的方法做这件事。有什么办法呢?

  • 我试图找到一个完整的模式列表,用于通过HTML5表单验证各种类型的输入,特别是、、等等,但我找不到任何模式。目前,这些输入验证的内置版本远非完美(甚至不检查输入的内容是否是电话号码)。所以我想知道,我可以使用哪些模式来验证用户在输入中输入了正确的格式? 以下是一些默认验证允许不允许的输入的例子: 这个字段允许在@后面有不正确域的电子邮件,它允许地址以破折号或句号开始或结束,这也是不允许的。因此,是

  • 我在typescript中声明了一个全局变量,类似于:global。test=“something”我尝试这样做,我得到错误属性“test”在类型“Global”上不存在。

  • 我想在我的基于打字稿的项目中,在它们自己的文件中定义几个接口,我将从它们中实现用于生产的类以及用于测试的模拟。但是,我不知道正确的语法是什么。我找到了很多关于声明接口和实现它们的教程,但是它们都在同一个文件中实现了接口和派生类,这不是很真实。导出和导入接口的正确方法是什么?

  • react-typescript 项目概况 使用Ant-Design开发的一套后台管理系统,主要用到了React、Typescript、Mobx、PWA等技术,使用webpack5打包构建,包含React16的一些新特性。 项目主要技术结构 react typescript antd mobx webpack4 react-router4 pwa 安装 在终端下操作 项目地址: (git clon

  • 我的TypeScript项目中有一个声明文件,如下所示: 这很好用,我可以在项目中的任何地方使用这个名称空间,而无需导入它。 我现在需要从第三方模块导入一个类型并在我的环境声明中使用它: 编译器现在抱怨它找不到名称空间“MyApp”,可能是因为导入阻止了它处于环境中。 是否有一些简单的方法可以在使用第三方类型的同时保留声明的环境性?