React和TypeScript是当今许多开发人员正在使用的两种很棒的技术。但是一起使用它们会变得很棘手,有时很难找到正确的答案。别担心,在本文中我们将总结结合两者的最佳实践。React和TypeScript如何协同工作在开始之前,让我们回顾一下React和TypeScript如何协同工作。React是“用于构建用户界面的JavaScript库”,而TypeScript是“编译为普通JavaScript的JavaScript的类型化超集”。通过一起使用它们,我们实际上是在使用JavaScript的类型化版本来构建UI。之所以一起使用它们,是为了获得静态类型语言(TypeScript)在UI上的好处:减少JS带来的bug,让前端开发更安全。TypeScript会编译我的React代码吗?一个经常被问到的常见问题是TypeScript是否编译你的React代码。TypeScript是这样工作的:TS:“嘿,这是你所有的UI代码吗?”反应:“是的!”TS:“酷!我会编译它并确保你不会错过任何内容。”反应:“对我来说听起来不错!”所以,答案是肯定的!但是后来,当我们介绍tsconfig.json配置时,大多数时候你要使用"noEmit":true。这是因为通常情况下,我们只是利用TypeScript进行类型检查。简而言之,TypeScript编译您的React代码以对您的代码进行类型检查。在大多数情况下,它不会发出任何JavaScript输出。输出仍然类似于非TypeScriptReact项目。TypeScript可以与React和Webpack一起使用吗?是的,TypeScript可以与React和webpack一起使用。幸运的是,官方的TypeScript手册为此提供了配置指南。希望这能让您轻而易举地了解两者的工作原理。现在,进入最佳实践!最佳实践我们已经研究了最常见的问题,并整理了一些使用TypeScript编写和配置React的最常见方法。这样,您可以将本文作为参考,在您的项目中遵循最佳实践。配置配置是开发中最不有趣但最重要的部分之一。我们如何才能在最短的时间内完成这些配置,从而提供更高的效率和生产力?让我们讨论以下配置tsconfig.jsonnpxcreate-react-appmy-app--templatetypescriptESLint/PrettierVSCode扩展和配置项目初始化初始化React/TypeScript应用程序的最快方法是使用带有TypeScript模板的create-react-app.您可以运行以下命令:npxcreate-react-appmy-app--templatetypescript这将使您开始使用TypeScript编写React。一些显着的差异是:.tsx:TypeScriptJSX文件扩展名tsconfig.json:带有一些默认配置的TypeScript配置文件react-app-env.d.ts:TypeScript声明文件,可以配置为允许像这样引用SVG幸运的是,最新的React/TypeScript默认会自动生成带有一些最小配置的tsconfig.json。我们建议您修改为:{"compilerOptions":{"target":"es5",//指定ECMAScript版本"lib":["dom","dom.iterable","esnext"],//编译包含的依赖库文件列表"allowJs":true,//允许编译JavaScript文件"skipLibCheck":true,//跳过所有声明文件的类型检查"esModuleInterop":true,//禁用命名空间引用(import*asfsfrom"fs")启用CJS/AMD/UMD样式引用(importfsfrom"fs")"allowSyntheticDefaultImports":true,//允许从没有默认导出的模块中默认导入"strict":true,//启用所有严格类型检查选项"forceConsistentCasingInFileNames":true,//不允许对同一文件的不一致格式引用"module":"esnext",//指定模块代码生成"moduleResolution":"node",//使用Node.js风格解析模块"resolveJsonModule":true,//允许导入.json扩展名的模块"noEmit":true,//无输出(意思是不编译代码,只进行类型检查)"jsx":"react",//SupportJSX"sourceMap":trueinthe.tsxfile,//生成对应的.map文件"declaration":true,//生成对应的.d.ts文件"noUnusedLocals":true,//报告未使用的局部变量用过的"noUnusedParameters":true,//报告未使用参数的错误"experimentalDecorators":true,//启用对ES装饰器的实验性支持"incremental":true,//通过读取以前的编译/将信息写入磁盘上的文件以启用增量编译"noFallthroughCasesInSwitch":true},"include":["src/**/*"//***TypeScript文件应该进行类型检查***],"exclude":["node_modules","build"]//***Fileswithouttypechecking***}其他建议来自react-typescript-cheatsheet社区ESLint/Prettier,确保你的代码遵循项目或团队的规则,风格一致,推荐您设置ESLint和Prettier是为了让它们正常工作,请按照以下步骤进行设置。1、安装依赖yarnaddeslint@typescript-eslint/parser@typescript-eslint/eslint-pluginslint-plugin-react--dev2。在根目录下创建eslintrc.js文件,添加如下内容:module.exports={parser:'@typescript-eslint/parser',//指定ESLint解析器extends:['plugin:react/recommended',//使用来自@eslint-plugin-react的推荐规则'plugin:@typescript-eslint/recommended',//使用来自@typescript-eslint/eslint-plugin的推荐规则],parserOptions:{ecmaVersion:2018,//Allow解析最新的ECMAScript特性sourceType:'module',//AllowimportecmaFeatures:{jsx:true,//JSXparsingisallowed},},rules:{//customrules//e.g."@typescript-eslint/explicit-function-return-type":"off",},settings:{react:{version:'detect',//告诉eslint-plugin-react自动检测React的版本},},};3、添加Prettier依赖yarnaddprettiereslint-config-prettiereslint-plugin-prettier--dev4。在根目录文件中新建一个.prettierrc.js,添加如下内容:module.exports={semi:true,trailingComma:'all',singleQuote:true,printWidth:120,tabWidth:4,};更新.eslintrc.js文件:module.exports={parser:'@typescript-eslint/parser',//指定ESLint解析器extends:['plugin:react/recommended',//使用来自@eslint-plugin-react的推荐规则'plugin:@typescript-eslint/recommended',//使用来自@typescript-eslint/eslint-plugin的推荐规则'prettier/@typescript-eslint',//使用ESLint-config-prettier禁用来自@typescript-eslint/ESLint的与prettier'plugin:prettier/recommended',]冲突的ESLint规则,]parserOptions:{ecmaVersion:2018,//允许解析最新的ECMAScript特性sourceType:'module',//允许导入ecmaFeatures:{jsx:true,//允许解析JSX},},rules:{//自定义规则//例如."@typescript-eslint/explicit-function-return-type":"off",},settings:{react:{version:'detect',//告诉eslint-plugin-react自动检测React的版本},},};VSCode扩展和设置我们添加了ESLint和Prettier,下一步是在保存时自动修复/美化我们的代码。首先,安装VSCode的ESLint扩展和Prettier扩展。这会将ESLint与您的编辑器无缝集成。接下来,通过将以下内容添加到您的.vscode/settings.json来更新您的工作区设置:{"editor.formatOnSave":true}保存时,VSCode将发挥其魔力并修复您的代码。惊人的!组件React的核心概念之一是组件。在这里,我们指的是Reactv16.8及以后的标准组件,即使用Hooks而不是类的组件。通常,一个基本组件会引起很多关注。我们来看一个例子:importReactfrom'react'//函数声明functionHeading():React.ReactNode{return
