Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何在VSCode中格式化TypeScript代码?配置TSLint和Prettier的指南_创想鸟

如何在VSCode中格式化TypeScript代码?配置TSLint和Prettier的指南

使用Prettier和ESLint在VSCode中格式化TypeScript代码,需安装Prettier与ESLint扩展,通过npm安装prettier、eslint、@typescript-eslint/parser、@typescript-eslint/eslint-plugin、eslint-config-prettier和eslint-plugin-prettier依赖,创建.prettierrc.json配置格式化规则,.eslintrc.js集成ESLint与Prettier并启用TypeScript支持,配置.vscode/settings.json实现保存时自动格式化与修复,可选添加npm脚本和husky+lint-staged在提交时校验,确保代码风格统一与质量合规。

如何在vscode中格式化typescript代码?配置tslint和prettier的指南

要在VSCode中高效地格式化TypeScript代码,核心策略是结合使用Prettier作为代码风格格式化工具,以及ESLint(而非已弃用的TSLint)作为代码质量和规范检查工具。通过在VSCode中安装相应的扩展并进行项目级别的配置,你可以实现代码的自动格式化和错误提示,确保团队代码风格的一致性与代码质量。

解决方案

配置一个现代的TypeScript项目格式化工作流,通常涉及以下几个步骤:

安装VSCode扩展:

Prettier - Code formatter

:这是我们主要的格式化工具。

ESLint

:用于代码风格检查和潜在错误提示。

项目初始化与依赖安装:在你的项目根目录,通过npm或yarn安装必要的开发依赖。我通常会这么做:

npm install --save-dev prettier eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-prettier eslint-plugin-prettier# 或者用 yarn# yarn add --dev prettier eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-prettier eslint-plugin-prettier

这里面,

prettier

是格式化核心,

ESLint

是检查核心。

@typescript-eslint/parser

让ESLint能理解TypeScript语法,

@typescript-eslint/eslint-plugin

提供TypeScript特有的ESLint规则。

eslint-config-prettier

负责关闭ESLint中与Prettier冲突的格式化规则,避免两者“打架”。

eslint-plugin-prettier

则把Prettier的格式化问题作为ESLint的错误报告出来,这样ESLint就能统一处理所有代码规范问题。

创建Prettier配置文件 (

.prettierrc.json

):在项目根目录创建此文件,定义你的格式化偏好。例如:

{  "semi": true,  "singleQuote": true,  "tabWidth": 2,  "trailingComma": "all",  "printWidth": 100}

这些设置决定了分号、单引号、缩进宽度、尾随逗号和行宽等格式细节。

创建ESLint配置文件 (

.eslintrc.js

):在项目根目录创建此文件。这是一个典型的配置示例:

module.exports = {  parser: '@typescript-eslint/parser', // 指定ESLint解析器为TypeScript  extends: [    'eslint:recommended', // ESLint推荐的基础规则    'plugin:@typescript-eslint/recommended', // TypeScript推荐规则    'plugin:prettier/recommended' // 将Prettier规则作为ESLint规则,并禁用冲突规则  ],  parserOptions: {    ecmaVersion: 2020, // 允许解析最新的ES特性    sourceType: 'module', // 允许使用import/export    project: './tsconfig.json' // 如果需要更高级的TypeScript规则,指定tsconfig  },  rules: {    // 在这里可以覆盖或添加自定义的ESLint规则    // 例如:'no-console': 'warn',    // 'prettier/prettier': ['error', { "endOfLine": "auto" }] // 强制Prettier规则  }};

这个配置告诉ESLint如何解析TypeScript代码,继承了推荐的TypeScript规则集,并且最关键的是,它集成了Prettier,让ESLint来处理所有格式化问题。

配置VSCode工作区设置 (

.vscode/settings.json

):在项目根目录创建

.vscode

文件夹,并在其中创建

settings.json

文件。这是让VSCode自动应用这些规则的关键:

{  "editor.defaultFormatter": "esbenp.prettier-vscode", // 指定Prettier为默认格式化工具  "editor.formatOnSave": true, // 保存时自动格式化  "editor.codeActionsOnSave": {    "source.fixAll.eslint": true // 保存时自动修复ESLint报告的问题  },  "[typescript]": {    "editor.defaultFormatter": "esbenp.prettier-vscode"  },  "[typescriptreact]": {    "editor.defaultFormatter": "esbenp.prettier-vscode"  }}

这些设置确保当你保存TypeScript文件时,Prettier会自动格式化它,同时ESLint也会尝试修复它能自动解决的代码质量问题。

添加npm脚本(可选但推荐):在

package.json

中添加格式化和检查脚本,方便团队成员统一执行:

"scripts": {  "lint": "eslint \"{src,apps,libs}/**/*.ts\"",  "lint:fix": "eslint \"{src,apps,libs}/**/*.ts\" --fix",  "format": "prettier --write \"{src,apps,libs}/**/*.ts\""}

这样,运行

npm run format

就能对整个项目进行Prettier格式化,

npm run lint

检查ESLint问题,

npm run lint:fix

则尝试自动修复。

为什么Tslint已经过时了,我们现在应该用什么?

说实话,Tslint在TypeScript社区里曾经是个好伙伴,但技术迭代就是这样无情。它在2019年左右就宣布停止维护了,并且官方推荐迁移到ESLint。这背后有很多原因,但最主要的是ESLint生态系统的成熟度和社区的活跃度。

ESLint本身就是JavaScript代码检查的行业标准,拥有庞大的插件库和规则集,几乎你能想到的任何代码风格或潜在问题,ESLint都有对应的解决方案。当TypeScript越来越流行时,ESLint社区也迅速响应,通过

@typescript-eslint/parser

和

@typescript-eslint/eslint-plugin

提供了对TypeScript的完美支持。这意味着你可以在一个工具中同时检查JavaScript和TypeScript代码,这对于混合项目来说简直是福音。

现在,我们几乎都转向ESLint了。它不仅能检查语法错误和潜在的运行时问题,还能强制执行各种代码风格规则。相较于Tslint,ESLint的性能也往往更好,配置起来也更灵活。所以,如果你的项目还在用Tslint,我真心建议你花点时间迁移过来,你会发现一个更广阔、更活跃的生态。

Prettier和ESLint:它们各自扮演什么角色,以及如何协同工作?

理解Prettier和ESLint的角色,就像理解一支乐队里的主唱和伴奏。它们各司其职,却又密不可分。

Prettier 就像乐队的“风格总监”,它只关心代码的“好看程度”。它的核心理念是“有主见的格式化”,这意味着它会接管所有关于代码风格的决策:缩进、换行、空格、分号、引号等等。你几乎不需要自己去争论这些细节,Prettier会按照一套预设的、经过深思熟虑的规则来统一你的代码风格。它的好处是极大地减少了代码审查时关于风格的争论,让开发者可以专注于代码的逻辑本身。它不关心你的代码有没有bug,只关心它是不是整洁、一致。

ESLint 则是乐队的“质量控制经理”,它更关心代码的“健康状况”。ESLint会检查潜在的错误(比如未使用的变量、无法访问的代码)、强制执行最佳实践(比如禁止使用

eval

)、以及确保代码符合团队定义的复杂规则(比如函数圈复杂度不能过高)。它能帮助你发现那些可能导致bug或降低代码可维护性的问题。ESLint也有一部分格式化规则,但这正是它与Prettier需要协调的地方。

代码小浣熊 代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51 查看详情 代码小浣熊

它们如何协同工作?

关键在于避免“内讧”。ESLint自身也有一些格式化相关的规则,比如“一行最多多少个字符”、“是否需要分号”等。如果这些规则与Prettier的规则冲突,就会出现一个工具帮你改了,另一个又给你改回去的尴尬局面。

解决这个问题的方案是:

eslint-config-prettier

:这个插件的作用就是“劝架”。它会禁用所有ESLint中与Prettier冲突的格式化规则。这样一来,ESLint就不再插手代码风格,把这个任务完全交给Prettier。

eslint-plugin-prettier

:这个插件则更进一步,它把Prettier作为ESLint的一个规则来运行。这意味着,如果Prettier发现你的代码没有按照它的规则格式化,

eslint-plugin-prettier

就会把这个格式化问题报告成一个ESLint错误。这样,你就可以通过ESLint的统一报告来看到所有代码质量和格式化的问题,并且可以利用ESLint的自动修复功能 (

--fix

) 来一并解决。

所以,最终的工作流是:Prettier负责格式化,ESLint负责检查代码质量,并通过

eslint-config-prettier

和

eslint-plugin-prettier

确保两者和谐共处,共同维护代码的整洁与健康。

如何定制化你的格式化规则,以适应团队或个人偏好?

定制化规则是让这些工具真正为我所用的重要一步。毕竟,每个团队、每个项目,甚至每个开发者,都有自己的一些“小癖好”。

Prettier的定制化:Prettier的定制相对简单直接,因为它本身就是“有主见”的,可配置项不多,但核心的几个足以满足大多数需求。你只需要修改项目根目录下的

.prettierrc.json

文件。

一些我常用或推荐的配置项:

semi

:

true

(在语句末尾添加分号) 或

false

(不添加)。我个人偏向

true

,习惯使然。

singleQuote

:

true

(使用单引号) 或

false

(使用双引号)。我通常设为

true

,感觉更简洁。

tabWidth

: 2 (缩进2个空格) 或 4 (缩进4个空格)。这是个永恒的争论,团队统一就好,我个人喜欢2。

trailingComma

:

"all"

(在所有可能的地方添加尾随逗号,包括函数参数) 或

"es5"

(只在ES5有效的地方添加) 或

"none"

(不添加)。

"all"

对于Git diff和多行列表比较友好。

printWidth

: 100 (每行最大字符数)。超过这个长度Prettier会尝试换行。根据显示器大小和个人习惯调整。

arrowParens

:

"always"

(箭头函数参数总是带括号) 或

"avoid"

(单个参数时省略括号)。我通常设为

"always"

,保持一致性。

你可以通过查阅Prettier的官方文档来获取所有可配置项的详细说明。

ESLint的定制化:ESLint的定制则更为强大和灵活,因为它允许你覆盖、添加或禁用几乎任何规则。这都在你的

.eslintrc.js

文件中完成。

覆盖继承的规则:在

rules

字段下,你可以重新定义从

extends

继承而来的规则。例如,如果你觉得

plugin:@typescript-eslint/recommended

里的

no-explicit-any

规则太严格,可以这样覆盖它:

rules: {  '@typescript-eslint/no-explicit-any': 'off', // 关闭对any类型的检查  // 或者设置为警告而不是错误  // '@typescript-eslint/no-explicit-any': 'warn',  'no-console': ['warn', { allow: ['warn', 'error'] }] // 允许console.warn和console.error,但禁止console.log}

规则通常有三个级别:

"off"

(关闭)、

"warn"

(警告,不阻止提交)、

"error"

(错误,会阻止提交)。

添加自定义规则:你可以根据团队的具体需求添加ESLint没有内置的规则,通常这需要自定义ESLint插件,但对于大多数情况,直接使用现有插件提供的规则就足够了。

针对特定文件或目录的规则:ESLint允许你使用

overrides

字段来为不同的文件模式应用不同的规则。这在一些特殊场景下非常有用,比如测试文件:

overrides: [  {    files: ['**/*.test.ts', '**/*.spec.ts'], // 匹配测试文件    rules: {      'no-undef': 'off', // 测试文件中可能存在全局变量,暂时关闭      '@typescript-eslint/explicit-function-return-type': 'off' // 测试函数可能不需要明确返回类型    }  }]

团队强制执行:配置好这些规则后,最重要的是如何在团队中强制执行。除了VSCode的自动保存格式化,你还可以结合 Git Hooks。

Husky 和 lint-staged:

husky

允许你在Git事件(如

pre-commit

)发生时运行脚本。

lint-staged

则可以让你只对Git暂存区中的文件运行linter和formatter,而不是整个项目,这能大大提高效率。

安装依赖:

npm install --save-dev husky lint-staged

在

package.json

中配置:

"husky": {  "hooks": {    "pre-commit": "lint-staged"  }},"lint-staged": {  "*.{ts,tsx}": [    "eslint --fix",    "prettier --write",    "git add"  ]}

这样,每次你

git commit

时,

husky

会触发

lint-staged

,它会检查并格式化你即将提交的

.ts

或

.tsx

文件。如果有ESLint错误无法自动修复,提交就会被阻止,确保只有符合规范的代码才能进入仓库。这招非常有效,能从源头上保证代码质量。

定制化规则是一个持续的过程,随着项目的演进和团队的成长,你可能需要不断调整这些配置。但有了这些工具,这个过程会变得可控且高效。

以上就是如何在VSCode中格式化TypeScript代码?配置TSLint和Prettier的指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/458201.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
mac装了双系统怎么卸载
上一篇 2025年11月8日 02:22:50
铁路12306如何申请重点旅客服务_铁路12306重点旅客服务申请流程
下一篇 2025年11月8日 02:22:53

相关推荐

  • VSCode的括号匹配功能如何自定义?

    可通过 settings.json 自定义括号高亮的边框和背景色;2. 用 editor.matchBrackets 控制是否启用高亮;3. 启用 bracketPairColorization 可为嵌套括号着色;4. 使用 Ctrl/Cmd + Shift + 快速跳转配对括号。 VSCode 的…

    2026年9月21日
    000
  • JSF应用中Markdown文档动态链接处理指南

    本教程旨在解决jsf web应用程序中集成markdown文档时,如何动态处理内部链接以实现页面局部更新的问题。通过结合服务器端markdown渲染和客户端javascript事件监听,我们可以拦截markdown生成的html链接点击事件,利用ajax异步加载并渲染目标markdown文件,从而在…

    2026年9月21日
    500
  • 如何通过命令行参数启动VSCode?

    掌握VSCode命令行用法可提升开发效率,需先安装code命令到PATH,之后可用code .打开目录、code 文件名打开文件、code –diff比较文件、–disable-extensions排查问题,并支持别名与Shell结合使用。 通过命令行启动 VSCode 是一…

    2026年9月21日
    100
  • mysql如何理解数据压缩

    MySQL数据压缩通过减少存储空间提升I/O效率,主要在InnoDB引擎中实现页级压缩,使用zlib算法对BLOB、TEXT等大字段表压缩效果显著,需设置ROW_FORMAT=COMPRESSED和KEY_BLOCK_SIZE;压缩可降低磁盘使用并加速全表扫描,但增加CPU开销,频繁更新可能导致页分…

    2026年9月21日
    000
  • 在Java中如何实现线程优先级控制

    Java中线程优先级通过Thread类实现,取值范围1-10,分别对应MIN_PRIORITY、NORM_PRIORITY和MAX_PRIORITY;新线程继承父线程优先级,可通过setPriority()设置;尽管高优先级线程更可能被调度,但执行顺序不保证,因受操作系统影响;应避免依赖优先级控制关…

    2026年9月21日
    000
  • 如何在Java中使用接口实现多继承效果

    Java不支持多继承,但可通过实现多个接口模拟该效果。类可同时实现Flyable、Swimmable等接口,具备多种行为能力,并能利用默认方法复用逻辑,如Loggable提供日志功能。当多个接口含同名默认方法时,需在类中显式重写以解决冲突。接口用于定义“能做什么”,抽象类描述“是什么”,因类只能单继…

    2026年9月21日
    100
  • Linux文件和目录管理常见命令

    Linux文件和目录管理依赖于ls、cd、mkdir、rm、cp、mv等核心命令,用于浏览、创建、删除、复制和移动文件与目录;通过find、du、grep等命令可查找文件、定位大文件并清理磁盘空间;使用rename、mmv或脚本可实现批量重命名;为安全起见,应谨慎使用rm命令,推荐结合-i选项或使用…

    2026年9月21日
    000
  • VSCode的代码格式化快捷键是什么?

    VSCode代码格式化快捷键为Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS),需安装对应语言的格式化工具;若无效,可能是未安装扩展、文件类型不支持或快捷键冲突;可右键选择“格式化文档”或通过命令面板执行,也可在键盘快捷方式中自定义。 VSCode的代…

    2026年9月21日
    000
  • edge浏览器如何安装Chrome网上应用店的扩展_edge浏览器安装Chrome扩展方法

    答案:可通过四种方法在Edge浏览器中安装Chrome扩展。1、直接从Chrome网上应用店添加扩展,Edge会自动识别并安装;2、手动下载CRX或ZIP文件,通过开启开发者模式加载已解压的扩展程序;3、从Crx4Chrome等第三方平台下载兼容扩展并按手动方式安装;4、对扩展的manifest.j…

    2026年9月21日
    000
  • 如何在Java中实现简单的输入输出

    使用Scanner类读取键盘输入,需导入java.util.Scanner并创建实例;2. 调用nextInt、nextLine等方法获取不同类型数据,注意nextInt不读取换行符可能导致nextLine读取空字符串;3. 推荐使用后关闭Scanner;4. 输出通过System.out.prin…

    2026年9月21日
    000
  • VSCode的快捷键映射冲突怎么办?

    首先查看快捷键绑定情况,通过Ctrl+K再Ctrl+S打开键盘快捷方式界面,搜索目标键组合如Ctrl+Shift+P,查看并识别冲突命令;接着右键冲突命令选择“更改键绑定”设置新组合或删除多余绑定;为精确定位,可查看命令ID如workbench.action.quickOpen区分相似命令;若调整较…

    2026年9月21日
    000
  • 在Java中如何创建一个天气查询小应用

    注册OpenWeatherMap获取API密钥;2. 使用Java 11+的HttpClient发送HTTP请求;3. 构造带城市参数的URL并调用天气接口;4. 解析返回的JSON数据提取温度和天气描述;5. 在控制台输出结果,支持中文城市需URL编码。 在Java中创建一个天气查询小应用,核心是…

    2026年9月21日
    000
  • 如何在Laravel中配置数据库连接?

    在laravel中配置数据库连接需要以下步骤:1. 编辑.env文件,设置db_connection、db_host、db_port、db_database、db_username、db_password。2. 确保config/database.php文件正确引用.env文件中的配置。3. 利用环…

    2026年9月21日
    000
  • 在VSCode中如何安全地切换分支而不丢失当前修改?

    先处理未提交修改再切换分支。可通过提交更改、使用Stash保存临时修改,或选择性暂存部分文件来安全切换,并在切换后恢复贮藏的更改,避免代码丢失。 在 VSCode 中切换分支时,如果当前有未提交的修改,直接切换可能会导致冲突或代码丢失。要安全切换分支,关键是先处理好当前的更改。以下是几种稳妥的方法。…

    2026年9月21日
    100
  • Java字符串字符计数:避免substring()误用与==比较陷阱

    本文旨在解决java字符串字符计数中常见的陷阱,包括对`substring()`方法的误解、使用`==`进行字符串内容比较的错误以及循环边界条件的设置问题。通过深入解析`charat()`、`equals()`方法,并提供正确的代码示例和调试技巧,帮助开发者编写出高效、准确的字符串处理逻辑,避免初学…

    2026年9月21日
    100
  • 如何自定义代码的格式化规则?

    自定义代码格式化规则需选择合适工具并配置文件实现统一风格。1. 根据语言选用主流工具如Prettier、Black、clang-format等;2. 在项目根目录创建对应配置文件如.prettierrc、.eslintrc.js或pyproject.toml,定义缩进、引号、行宽等规则;3. 将配置…

    2026年9月21日
    100
  • mysql如何设置自动重连

    答案:通过连接配置、连接池和应用层逻辑实现MySQL自动重连。启用MYSQL_OPT_RECONNECT选项(旧版本),推荐使用连接池如PooledDB、HikariCP并配置ping机制,应用层捕获连接异常后重试,结合指数退避策略提升稳定性。 MySQL 客户端或应用程序在连接断开后无法自动恢复,…

    2026年9月21日
    100
  • Android Ksoap2序列化嵌套整数数组到.NET Web服务的解决方案

    本教程旨在解决Android Ksoap2在向.NET Web服务发送包含嵌套整数数组(如`ArrayList`)的自定义对象时遇到的序列化错误。核心解决方案包括将`ArrayList`替换为`Vector`,并为`Vector.class`添加显式Ksoap2类型映射,确保数据正确传输。 在And…

    2026年9月21日
    100
  • 如何利用Draw.io Integration扩展在VSCode中绘制并嵌入架构图?

    安装Draw.io Integration扩展后,可在VSCode中直接创建编辑图表。右键选择“Create Diagram with Draw.io”新建.diagram文件,双击打开内置编辑器,拖拽组件绘制流程图、架构图等。保存后自动生成Base64编码的嵌入代码,粘贴至Markdown即可预览…

    2026年9月21日
    200
  • Java并发编程中CopyOnWriteArrayList使用场景

    CopyOnWriteArrayList适用于读多写少场景,通过写时复制实现线程安全,读操作无锁并发,迭代基于快照不抛异常,适合配置列表、监听器等数据变动少且需高性能读取的并发环境。 在Java并发编程中,CopyOnWriteArrayList 是一种线程安全的List实现,适用于读多写少的并发场…

    2026年9月21日
    100

发表回复

登录后才能评论
关注微信