0

我正在创建一个输入handleChange,但收到一个错误元素隐式具有“任何”类型,因为类型“typeof globalThis”在尝试更新状态(this.setState)时没有索引signature.ts(7017)。这是代码片段

const [first_name, setFname] = useState<string>();
  const [last_name, setLname] = useState<string>();
  const [email, setEmail] = useState<string>();
  const [avatar, setAvatar] = useState();
  
   const handleChange = (e:any) => {
        const { name, value } = e.target;
        this.setState({ [name]: value });
    };

4

1 回答 1

1

主要问题是这样的:

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

这看起来像是在class组件中的代码,但您只在功能组件(或其他挂钩)中使用挂钩,而不是class组件。使用功能组件和钩子,您不使用中心setState方法,而是使用从中获取的设置器useState

此外,错误消息表明 TypeScript 的代码是在全局范围内,这很奇怪,因为你不在那里使用钩子。

最后,TypeScript 应该抱怨您的useState调用,因为您已将其用作string泛型类型参数但未提供任何初始值。初始值将默认为undefined,它不是字符串。


这有点切题,但错误具体说明的是该this代码 ( typeof globalThis) 中的类型没有在setState其上定义属性,因此this.setState隐式具有any类型,因为 TypeScript 没有类型信息。您将它用作函数,因此 TypeScript 警告您它没有任何告诉它this.setState是函数的信息。

于 2020-07-21T08:43:47.193 回答