reactjs - TS-uttrykk produserer en foreningstype som er for kompleks til å representeres med Material-UI og @react-three/fiber
Jeg lager en Next.js-applikasjon som bruker Material-UI og @react-three/fiber-biblioteket.
Jeg har nylig oppgradert Material-UI til V5, og en feil har dukket opp.
Her er feilen:
Jeg søker overalt for å fjerne det, men jeg fant ingenting.
Så jeg prøver å lage et nytt prosjekt med Material-UI V5 og jeg installerer andre avhengigheter én etter én. I begynnelsen vises ikke feilen, men når jeg installerer @react-three/fiber OG @react-three/drei dukker feilen opp.
Så jeg fant ut at en Box-komponent eksporteres fra @material-ui og @react-three/drei, så jeg forstår feilen nå.
Her er min package.json:
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@emotion/react": "^11.4.0",
"@emotion/styled": "^11.3.0",
"@material-ui/core": "^5.0.0-beta.2",
"@material-ui/styles": "^4.11.4",
"@react-three/fiber": "^7.0.6",
"next": "11.0.1",
"react": "17.0.2",
"react-dom": "17.0.2"
},
"devDependencies": {
"@types/react": "17.0.16",
"eslint": "7.32.0",
"eslint-config-next": "11.0.1",
"typescript": "4.3.5"
}
}
Min tsconfig.json
{
"compilerOptions": {
"baseUrl": "src",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
Men jeg finner ikke hvordan jeg skal fikse det...
Noen har idé?
Svar #1
Løsning 1
Den stabile versjonen av MaterialUI fikser dette problemet.
Bruk denne pakken:
npm install @mui/material
Løsning 2 av Vivere
Legg til component-egenskapene til en div for å unngå TypeScript-feil.
<Box component="div">...</Box>
Svar #2
Jeg hadde den samme feilen på grunn av importering av @react-three/drei. Jeg har med suksess lokalisert filer, som får feilen til å dukke opp, men jeg klarer ikke å finne årsaken. Jeg ville sette pris på all innspill fra folk som kan mer om TypeScript.
Dette er en ganske stygg løsning. Slett alle disse definisjonsfilene:
node_modules/@react-three/drei/core/MeshWobbleMaterial.d.ts
MeshDistortMaterial.d.tsPointMaterial.d.ts(<- for nyere versjoner)
Selvfølgelig kan du ikke bruke disse komponentene i en Typescript-kontekst nå.
Du kan dele og pinne disse endringene ved å bruke patch-package. Dette vil sette opp et etter installasjon-steg, som vil bruke endringene (slettede filer) etter å ha kjørt npm/yarn install.
