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~
}
