Как добавить проверку типов с помощью TypeScript в проект React с помощью Webpack?

#reactjs #typescript #webpack #typechecking #webpack-config

#реагирует на #машинописный текст #веб-пакет #проверка типов #webpack-конфигурация

Вопрос:

Мне удалось добавить машинописный текст в свой проект React с помощью Webpack, но когда у меня возникает ошибка ввода, Webpack все равно компилируется. Например, здесь я присваиваю строку числовому значению, код Visual Studio указывает на ошибку, но Webpack все равно компилирует ее:

 let num: number = 123;  num = "Hello!!"; // lt;- Error, but webpack still compiles it.  export const App: FC = () =gt; {  return (  lt;divgt;  lt;h1gt;Welcome to React App!!!lt;/h1gt;  lt;/divgt;  ); };  

Когда возникает ошибка типа, я хочу, чтобы webpack не компилировал ее, поэтому, во-первых, ошибка должна быть устранена перед ее компиляцией, как я могу этого добиться? Это моя конфигурация:

package.json :

 {  "name": "react-webpack-template",  "version": "1.0.0",  "main": "index.js",  "license": "MIT",  "scripts": {  "prod::watch": "webpack --watch --mode production",  "dev::watch": "webpack --watch --mode development"  },  "devDependencies": {  "@babel/core": "^7.16.0",  "@babel/preset-env": "^7.16.4",  "@babel/preset-react": "^7.16.0",  "@babel/preset-typescript": "^7.16.0",  "@types/react": "^17.0.37",  "@types/react-dom": "^17.0.11",  "babel-loader": "^8.2.3",  "css-loader": "^6.5.1",  "mini-css-extract-plugin": "^2.4.5",  "style-loader": "^3.3.1",  "typescript": "^4.5.2",  "webpack": "^5.64.4",  "webpack-cli": "^4.9.1"  },  "dependencies": {  "@linaria/babel-preset": "^3.0.0-beta.13",  "@linaria/core": "^3.0.0-beta.13",  "@linaria/react": "^3.0.0-beta.13",  "@linaria/shaker": "^3.0.0-beta.13",  "react": "^17.0.2",  "react-dom": "^17.0.2"  } }  

babel.config.json :

 {  "presets": [  "@babel/preset-env",  [  "@babel/preset-react",  {  "runtime": "automatic"  }  ],  "@babel/preset-typescript"  ] }   

tsconfig.json

 {  "compilerOptions": {  "target": "es2016",  "jsx": "react-jsx",  "module": "commonjs",  "moduleResolution": "node",   "removeComments": true,   "esModuleInterop": true,  "forceConsistentCasingInFileNames": true,   "strict": true,   "alwaysStrict": true,   "noImplicitOverride": true,  "skipLibCheck": true  },  "include": ["src/**/*", "src/*"],  "exclude": ["node_modules"] }  

and webpack.config.js :

 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const { join } = require('path');  /** @type {import('webpack').Configuration} */ module.exports = {  entry: join(__dirname, 'src', 'index.tsx'),   output: {  path: join(__dirname, 'build'),  filename: '[name]/[name].js'  },   resolve: {  extensions: ['.js', '.ts', '.jsx', '.tsx']  },   devtool: 'source-map',   module: {  rules: [  {  test: /.t(s|sx)$/,  exclude: /node_modules/,  use: ['babel-loader']  },  {  test: /.css$/,  use: [MiniCssExtractPlugin.loader, 'css-loader']  },  {  type: 'assets',  test: /.(png|jpg|svg)$/  }  ]  },   plugins: [new MiniCssExtractPlugin()] };   

Я надеюсь, что вы сможете мне помочь 🙂