javascript - Egenskab findes ikke på typen 'Never' Typescript/React


Jeg får en 'Property 'activationDate' does not exist on type 'never'' fejl, når jeg prøver at køre min kode i React, hvad kunne problemet være? Jeg er sikker på, at det har noget at gøre med Typescript.

Rediger: Har stadig problemer med, at mentor-typen er any? Ikke sikker på, hvad det betyder?

2. redigering: TIL REFERENCE følger jeg denne vejledning (https://alligator.io/react/axios-react/) for at lave en simpel GET-anmodning, jeg ved bare ikke, hvordan jeg konverterer den til TypeScript.

const TOKEN_KEY:string = `mpp-tk`;

type mentor = { activationDate: any }


class SamSearch extends React.Component<any>  {

  public state = {
    mentors: mentor[] // or any[]
  }

public componentDidMount() {
    const token = localStorage.getItem(TOKEN_KEY);
  const config = {
    headers: {
      Authorization : token
    }
  }

axios.get(`http://localhost:8080/findMentorFromSam/001339159`, config)
  .then(res => {
    console.log(res.data);
    const mentors = res.data;
    this.setState({ mentors });
  })


 }



public render(): React.ReactNode {
    const {
      classes
    } = this.props as any & {
      titleComponent?: React.Component
    };
return (

  <Grid container className={classes.test}>
  <ul>
  { this.state.mentors.map(mentor => <li>{mentor.activationDate}</li>)}
  </ul>
  <p>TEST</p>
  </Grid>



   )
  }
}
export default compose(
  withRouter,
  withStyles(styles)
)(SamSearch)

Svar #1

Du bliver nødt til at sige, hvilken type array mentor er, det burde være noget i stil med

type Mentor = { activationDate: any }

class SamSearch extends React.Component<any>  {
  public state: { mentors: Mentor[] } = { // or any[]
    mentors: []
  }
  // ...rest of the class
}

Svar #2

public state = {
    mentors: mentor[] // or any[]
}

Dette er ikke gyldig TypeScript - du kan ikke erklære typer inden for et objektlitteral. Gyldig måde ville være:

public state: { mentors: mentor[] } = {
    mentors: []
}

Men hvis du tager React i betragtning, er dette også forkert måde og årsagen til, at du får never - du bør bruge den anden generiske parameter af React.Component<TProps, TState> og sætte standardtilstanden sådan her:

type SamSearchProps = {};
interface SamSearchState {
    mentors: mentor[];
}
class SamSearch extends React.Component<SamSearchProps, SamSearchState> {
    constructor(props: SamSearchProps) {
        super(props);
        this.state = { mentors: [] };
    }

    ~rest of component logic~
}

Relaterede artikler