为什么状态在React TypeScript中首先返回空并且类型'never'不存在属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么状态在React TypeScript中首先返回空并且类型'never'不存在属性?相关的知识,希望对你有一定的参考价值。

我正在尝试使用打字稿来处理状态。在“返回monster.name.toLowerCase()。includes(search)”行中,我收到此错误消息“类型'never'不存在属性'name'。”可以在https://jsonplaceholder.typicode.com/users处找到该API。我在做错她的事,或者我想念或不做的事。

import React, { Component } from 'react';
import './App.css';
import CardList from './Components/CardList/CardList';

interface IProps {
  superhero: string;
}

interface IState {
  monsters: [],
  search: string,
}

class App extends Component<IProps, IState> {

  state: IState;

  constructor(props: IProps){

    super(props);

    this.state = {
      monsters: [],
      search: '',
    }

  }

  componentDidMount(){
    fetch('https://jsonplaceholder.typicode.com/users')
    .then(response => response.json())
    .then(users => this.setState({monsters: users}))
  }

  render(){

    interface IContact {
      id: number;
      name: string;
  }

    const searchMonsters = (e: any) => {
      console.log(e.target.value)
      this.setState(
        { 
          search: e.target.value
        }
      );

    }

    const { monsters, search } = this.state;

    //return monster.name.toLowerCase().includes(search) giving error Property 'name' does not exist on type 'never'

    const filteredMonsters = monsters.filter( monster => {
      return monster.name.toLowerCase().includes(search)
    });


    console.log(this.state.monsters);


    return (
      <div className="App">
        <input type="search" placeholder="Search Monster" onChange={searchMonsters}/>
        <CardList monsters={filteredMonsters}/>
      </div>
    );

  }

}

export default App;
答案

您不是要将monster声明为any类型吗?

const filteredMonsters = monsters.filter((monster: any) => {
  return monster.name.toLowerCase().includes(search)
});
另一答案

您应指定数组类型

interface Monster{
  name: string,
  //...
}
interface IState {
  monsters: Monster[],
  search: string,
}

以上是关于为什么状态在React TypeScript中首先返回空并且类型'never'不存在属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中使用带有 React 无状态功能组件的子组件?

使用 Typescript 在 React 中作为状态的两个字符串之一

如何在 Typescript 中将具有动态键的对象设置为 React 状态

我想在辅助函数中操作 React 类组件中存在的状态。我想在 Typescript 中实现相同的目标

如何在带有 TypeScript 的 React-Native 中使用 styled-component 键入无状态功能组件?

使用 typescript 中 Promise 中的值设置 React.FC 状态