reactjs - Material-ui-next typescript-fejl
Jeg oprettede en standard VS2017 react-redux skabelon og prøvede at tilføje material-ui-next komponent, og jeg får følgende fejl:
ERROR in [at-loader] ./node_modules/material-ui/BottomNavigation/BottomNavigationButton.d.ts:6:74 TS2344: Type '"onChange"' does not satisfy the constraint '"className" | "style" | "component" | "classes" | "innerRef" | "centerRipple" | "disableRipple" |...'.
ERROR in [at-loader] ./node_modules/material-ui/ButtonBase/ButtonBase.d.ts:6:13 TS2694: Namespace 'React' has no exported member 'AnchorHTMLAttributes'.
ERROR in [at-loader] ./node_modules/material-ui/Snackbar/Snackbar.d.ts:10:18 TS2430: Interface 'SnackbarProps' incorrectly extends interface 'Pick<HTMLAttributes<HTMLDivElement> & Partial<TransitionHandlers> & { classes: any; }, "defaultCh...'. Type 'SnackbarProps' is not assignable to type 'Pick<HTMLAttributes<HTMLDivElement> & Partial<TransitionHandlers> & { classes: any; }, "defaultCh...'. Types of property 'action' are incompatible. Type 'ReactElement<any> | ReactElement<any>[]' is not assignable to type 'string'. Type 'ReactElement<any>' is not assignable to type 'string'.
Dette er min kode:
```
import * as React from 'react';
import { Link, RouteComponentProps } from 'react-router-dom';
import { connect } from 'react-redux';
import { ApplicationState } from '../store';
import * as PetGiftboxProbabilitiesState from
'../store/PetGiftboxProbabilities';
import { GridList, GridListTile } from 'material-ui/GridList';
// At runtime, Redux will merge together...
type PetGiftboxProbabilityProps =
PetGiftboxProbabilitiesState.PetGiftboxProbabilitiesState
& typeof PetGiftboxProbabilitiesState.actionCreators
& RouteComponentProps<{}>;
class FetchData extends React.Component<PetGiftboxProbabilityProps, {}> {
componentWillMount() {
// This method runs when the component is first added to the page
this.props.requestPetGiftboxProbabilities();
}
public render() {
return <div>
<h1>Pet giftbox forecast</h1>
{this.renderForecastsTable()}
</div>;
}
private renderForecastsTable() {
return <GridList cellHeight={160}>
{this.props.petGiftboxProbabilities.map(pet =>
<GridListTile key={pet.petId}>
<img className="pet-image" src={pet.imageUrl} alt=
{pet.petName} />
</GridListTile>
)}
</GridList>;
}
}
export default connect(
(state: ApplicationState) => state.PetGiftboxProbabilities,
PetGiftboxProbabilitiesState.actionCreators
)(FetchData as any) as typeof FetchData;
Hvad er galt med min kode? Tak på forhånd.
Svar #1
Opdatering 2/6/2018: Jeg vil ikke længere anbefale at fastgøre til disse gamle versioner. De nyeste versioner af React-typer og material-ui burde fungere sammen, selvom der i dag er et andet typningsproblem med en løsning på vej, som har en simpel løsning: https://github.com/mui-org/material-ui/issues/11656
Min nuværende opsætning (næste version af @material-ui/core burde løse problemet forårsaget af TS 2.9):
"@material-ui/core": "^1.1.0",
"@types/react": "^16.3.16",
"typescript": "^2.9.1"
Jeg havde lige det samme problem. Et svar i Type 'ReactType' er ikke generisk (material-ui@next) pegede mig i den rigtige retning, men her er de specifikke pakker og versioner, som jeg havde brug for at opdatere til:
"@types/react": "16.0.34",
"@types/react-dom": "16.0.34",
"@types/react-router": "4.2.0",
"@types/react-router-dom": "4.2.2",
"react": "16.0.34",
"react-dom": "16.0.34",
"react-router-dom": "4.2.2",
Du kunne prøve at opdatere dem i package.json manuelt og derefter køre npm upgrade, eller slette node_modules og geninstallere. Det endte med at virke for mig, selvom det var en omvej med installation/opgradering/hovedbankning i omkring 40 minutter, før det endelig blev kompileret. Jeg anbefaler også at tjekke node_modules/@types/react/package.json for at se, hvilken version der faktisk bliver brugt, hvis du støder på problemer.
Svar #2
npm upgrade virkede for mig - jeg startede med yarn, men skiftede hurtigt over, da jeg gik over til Material-UI-next.
