javascript - "Kunde inte kompilera" "Parseringsfel: Ov väntad token :" under försök att migrera till typescript i befintlig create-react-app
Jag har en befintlig create-react-app som jag försöker migrera från JavaScript till TypeScript. Jag följde migrationsguiden på create-react-app.dev och installerade följande: npm install --save typescript @types/node @types/react @types/react-dom @types/jest
Jag kopierade och klistrade sedan in koden från Material-UIs exempel på detta codesandbox-exempel, in i ResponsiveDrawer.tsx. När jag startar min server får jag:
Failed to compile.
./src/components/ResponsiveDrawer.tsx
src/components/ResponsiveDrawer.tsx
Line 21:36: Parsing error: Unexpected token :
Den identifierade raden är:
const useStyles = makeStyles((theme: Theme) =>
Jag har lekt med min eslint-konfiguration och laddat ner olika plugins. Min package.json innehåller:
"@babel/preset-typescript": "^7.9.0",
"@types/react-router-dom": "^5.1.7",
"@typescript-eslint/eslint-plugin": "^4.24.0",
"@typescript-eslint/parser": "^4.24.0",
"eslint": "^7.27.0",
"eslint-plugin-import": "^2.23.3",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-react": "^7.23.2",
"typescript": "^3.9.9"
Jag hade initialt lintningsfel markerade i .tsx-filen, men det verkar ha lösts genom att lägga till ovanstående. Jag har fortfarande problem med att kompilera appen. Vet någon hur man löser det?
Svar #1
Jag är inte säker på exakt vad jag gjorde, men jag fick det att fungera. Jag tittade på några YouTube-videor och tutorials. Jag skulle rekommendera denna om någon annan sitter fast på samma sätt.
Jag gjorde ändringar i följande:
package.json
"babel": {
"presets": [
"@babel/preset-env",
"@babel/preset-react",
"@babel/preset-typescript"
],
"plugins": [
"@babel/plugin-proposal-nullish-coalescing-operator",
"@babel/plugin-proposal-optional-chaining"
]
},
"devDependencies": {
"@babel/preset-typescript": "^7.9.0",
"@types/material-ui": "^0.21.8",
"@types/react-router-dom": "^5.1.7",
"@typescript-eslint/eslint-plugin": "^4.24.0",
"@typescript-eslint/parser": "^4.24.0",
"eslint": "^7.27.0",
"eslint-plugin-import": "^2.23.3",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-react": "^7.23.2",
"typescript": "^3.9.9"
}
tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"jsx": "react",
"strict": true,
"noImplicitAny": false,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
.eslintrc.json
{
"root":true,
"parser": "@typescript-eslint/parser",
"plugins": ["react", "@typescript-eslint", "eslint-plugin-node"],
"files": ["**/*.ts", "**/*.tsx"],
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": ["plugin:react/recommended", "plugin:@typescript-eslint/recommended"],
...
}
