javascript - Typescript-feil under konvertering av et React-prosjekt
Dette er spesifikt for en React-app jeg konverterer fra standard ES2015 til Typescript. I mine .tsx-filer (konvertert fra vanlige .js-filer) får jeg et par Typescript-feil som jeg ikke vet hvordan jeg skal løse.
Den første er: error TS2339: Egenskapen 'propTypes' finnes ikke på typen 'typeof App'.
Dette gjelder for:
App.propTypes = {
actions: PropTypes.object.isRequired,
fuelSavingsAppState: PropTypes.object.isRequired
};
Jeg prøvde å lage et grensesnitt over den koden som definerte App som:
interface App {
propTypes?: any;
}
Men dette hadde ingen effekt. Klarer jeg er ny på Typescript, så hva går jeg glipp av?
Den andre feilen er:
error TS2605: JSX element type 'Element' is not a constructor function for JSX elements.
Property 'render' is missing in type 'Element'
og dette gjelder for:
{settings.necessaryDataIsProvidedToCalculateSavings ? <FuelSavingsResults savings={settings.savings} /> : null}
Feilen refererer spesifikt til delen om <FuelSavingsResults
Helt i villrede om hvor jeg i det hele tatt skal begynne med det. Alle forslag tas imot med takk.
i tilfelle det hjelper, starter definisjonen for FuelSavingsResults slik:
let FuelSavingsResults = (props) => {
let savingsExist = NumberFormatter.scrubFormatting(props.savings.monthly) > 0;
let savingsClass = savingsExist ? 'savings' : 'loss';
let resultLabel = savingsExist ? 'Savings' : 'Loss';
og deretter har en vanlig React-renderingsmetode som følger, men jeg tror ikke det vil ha noen betydning.
Svar #1
feil TS2339: Egenskapen 'propTypes' eksisterer ikke på typen 'typeof App'.
I stedet for
class App extends React.Component{
}
App.propTypes = {
actions: PropTypes.object.isRequired,
fuelSavingsAppState: PropTypes.object.isRequired
};
Bruk en static-egenskap.
class App extends React.Component{
static propTypes = {
actions: PropTypes.object.isRequired,
fuelSavingsAppState: PropTypes.object.isRequired
};
}
feil TS2605: JSX-elementtype 'Element' er ikke en konstruksjonsfunksjon for JSX-elementer. Egenskapen 'render' mangler i typen 'Element'
Dette var en feil i kompilatoren som siden har blitt fikset: https://github.com/Microsoft/TypeScript/issues/6349 Alternativt kan du gi typeannotasjoner for props. 🌹
Svar #2
Er propTypes virkelig nødvendig? Vil ikke grensesnittkontrollen ved kompilering sjekke det propTypes sjekker ved kjøretid?
interface IApp{
actions:any;
fuelSavingsAppState: (props:any)=> void;
}
class App extends React.Component<IApp,{}>{
}
eller hvis du bruker dumme komponenter
const App = ({actions, fuelSavingsAppState }:IApp):React.ReactElement<{}> => (
<div>
What Ever you want to do with the props
</div>
)
Merk: Hvis du bruker objekt, vennligst opprett et grensesnitt for det samme. Som handlinger som for øyeblikket er gitt som 'any', som ideelt sett burde vært et grensesnitt.
