广告位联系
返回顶部
分享到

ESLint规范TypeScript代码使用方法

JavaScript 来源:互联网 作者:秩名 发布时间:2022-11-27 12:22:22 人浏览
摘要

ESLint 是一种 JavaScript linter,可以用来规范 JavaScript 或 TypeScript 代码,本文教你怎么在项目中快速把 ESLint 安排上。 怎么写出优雅的代码是一个老生常谈的话题,这其中包含了太多内容可

ESLint 是一种 JavaScript linter,可以用来规范 JavaScript 或 TypeScript 代码,本文教你怎么在项目中快速把 ESLint 安排上。

怎么写出优雅的代码是一个老生常谈的话题,这其中包含了太多内容可聊,但搞一套标准规范绝对是万里长征第一步。ESLint 致力于如何把规范落地到你的项目中,让你的代码清清爽爽。

ESLint 作为一种 JavaScript linter,它能强制帮你遵循一套特定的代码书写风格和标准,并且会在不符合标准的地方贴心地给出提示。

你可能也听说过 TSLint,很可(不)惜(错),已经挂了。原因是考虑到 ESLint 的存在,并且两个项目之间存在大量的重复工作,TSLint 团队在 2019 年宣布不再维护该项目。

也就是说,你可能会搜到很多已存的 TSLint 周边生态包,但在使用之前,你得掂量一下,它们可是没有人在维护了哦。

所以,ESLint 就成为了事实上的标准,帮你规范 JavaScript 和 TypeScript 代码。

安装依赖 

在你的工程下运行下面的代码,安装 ESLint 及其它依赖包

1

npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin

.eslintrc.js

创建 .eslintrc.js 文件

1

2

3

4

5

6

7

8

9

10

11

12

{

  "root": true,

  "parser": "@typescript-eslint/parser",

  "plugins": [

    "@typescript-eslint"

  ],

  "extends": [

    "eslint:recommended",

    "plugin:@typescript-eslint/eslint-recommended",

    "plugin:@typescript-eslint/recommended"

  ]

}

.eslintignore

再建一个忽略文件 .eslintignore,忽略不想加入限制的文件,比如 node_modules,打包产物文件等

1

2

node_modules

dist

package.json scripts

在 package.json 文件中新建一条 lint 命令

1

2

3

4

5

6

{

  "scripts": {

    ...

    "lint": "eslint . --ext .ts",

  }

}

执行 npm run lint 试试看

假如我们的工程下只有 index.ts 文件,内容如下

1

console.log('Hello world!')

因为我们目前还没有创建任何规则,所以看不出什么变化。

Rules

eslint 的 rules 有三种模式,off,on 和 warn

"off" means 0 (turns the rule off completely)

"warn" means 1 (turns the rule on but won't make the linter fail)

"error" means 2 (turns the rule on and will make the linter fail)

如果想禁用 console,可以这样设置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

  "root": true,

  "parser": "@typescript-eslint/parser",

  "plugins": [

    "@typescript-eslint"

  ],

  "extends": [

    "eslint:recommended",

    "plugin:@typescript-eslint/eslint-recommended",

    "plugin:@typescript-eslint/recommended"

  ],

  "rules": {

    "no-console": 2 // Remember, this means error!  }

}

再运行 npm run lint

1

2

2:1  error  Unexpected console statement  no-console

    ? 1 problem (1 error, 0 warnings)

lint 报错了...

关掉 no-console

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

  "root": true,

  "parser": "@typescript-eslint/parser",

  "plugins": [

    "@typescript-eslint"

  ],

  "extends": [

    "eslint:recommended",

    "plugin:@typescript-eslint/eslint-recommended",

    "plugin:@typescript-eslint/recommended"

  ],

  "rules": {     "no-console": 0

  }

}

1

npm run lint

世界安静了...

fix

我们可以利用 ESLint 的 fix 功能,自动修复报 warn 或 error 的代码

改造一下 package.json

1

2

3

4

5

6

{

  "scripts": {

    ...

    "lint": "eslint . --ext .ts",

    "lint-and-fix": "eslint . --ext .ts --fix"  },

}

运行 npm run lint-and-fix  可以检查和自动修复有问题代码

聊一聊原理

parser

ESLint 原理需要结合 parser 配置项来讲。

首先,ESLint 为什么需要一个 解析器? 简单来讲,ESLint 做规则校验的前提是将语言转变为抽象语法树(AST),它的校验规则是用于适配 AST 的,在遍历 AST 节点的过程中,找到该节点适配的规则,并判断是否满足规则。

plugins

ESLint 能火起来的很大原因,在于它的插件式设计,这种设计使得他能快速的响应变化。插件是什么?插件就是规则,任何插件想要在 ESLint 中生效,需要规定两点内容。

  • 该规则针对的是 AST 的那些节点。
  • 该节点需要满足怎样的条件。

有了这两点,ESLint 就会在遍历 AST 的过程中,找出不符合规则的节点,将其报告出来。

默认情况下,ESLint 中的规则会对 JS 进行校验,如果我们想对 React 进行校验的话,就需要增加 eslint-plugin-react 插件,如下所示,在 plugins 中增加这个插件,eslint-plugin 的前缀是可以省略的。

1

2

3

"plugins": [

    "react"

]

有了规则是不够的,我们还需要开启这些规则,可以在 rules 中配置,更好的方法就是在 extends 中加入以下代码。

1

2

3

"extends": [

    "plugin:react/recommended"

]

extends

ESLint 中的规则很多,但是默认都不会开启的,我们需要在 rules 中设定这些规则开关,这个环节非常繁琐。因此 ESLint 设计了 extends 这个字段,用于继承别的文件中已经配置好的的规则。在不加入任何插件的情况下,extends 可以配置为 eslint:recommended 或 eslint:all。recommended 是 ESLint 官方推荐的配置,校验的规则比较少,eslint:all 则会开启全部的规则校验。

如果你想了解这两者的区别,你可以去 官方规则文档 查看。更快的方法是将 "eslint:recommended" 变成 "eslint:all"。修改后的结果非常夸张,我总共 3 行代码 ESLint 检测出 10 个错误。

extends 是一个数组,可以配置多组规则,每个配置继承它前面的配置。实际开发中,我们会继承一些优秀的 ESLint 方案,比如 airbnb,然后结合自己的实际情况,在 rules 中进一步配置。

总结

使用 @typescript-eslint/parser 作为解析器,该解析器能够识别 TS 语法,结合特定的 plugin 就能实现 TS 规范化。

ESLint 的核心在于 parser 和 plugin,一个负责将当前代码解析为 AST,一个负责在 AST 的基础上生成规则。

不同的 parser 代表的不同的解析方式,各式各样的 plugin 也代表不同的规则,ESLint 的生态能越来越好,一部分要归功于这种可插拔式的设计。

目前社区有很多优秀的 ESLint 规范,我们可以参考这些规范做一份适用于自己团队的规范。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7166533217376272414
相关文章
  • 解决React报错Expected `onClick` listener to be a function

    解决React报错Expected `onClick` listener to be a function
    当我们为元素的onClick属性传递一个值,但是该值却不是函数时,会产生ExpectedonClicklistener to be a function报错。为了解决该报错,请确保只为元
  • ESLint规范TypeScript代码使用方法
    ESLint 是一种 JavaScript linter,可以用来规范 JavaScript 或 TypeScript 代码,本文教你怎么在项目中快速把 ESLint 安排上。 怎么写出优雅的代码是一
  • Vue屏幕自适应三种实现方法介绍
    使用 scale-box 组件 属性: width宽度 默认1920 height高度 默认1080 bgc背景颜色 默认transparent delay自适应缩放防抖延迟时间(ms) 默认100 vue2版本:
  • 在web worker中使用fetch实例介绍
    1.Web Worker意义 由于 JS 是单线程的,费时的 JS 操作将会导致整个页面的阻塞。Web Worker 提供了创建多线程的方法,将一些耗时且 UI 无关的工
  • 实时通信Socket io的使用介绍

    实时通信Socket io的使用介绍
    最近在工作中,遇到了一个需求,需要和后台服务实时通信,获取各种设备的实时状态、以及对设备下发指令。后端这边选择了socket.io这个
  • js中如何对url进行编码和解码
    js 对url进行编码和解码 三种编码和解码函数 encodeURI和 decodeURI 它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中
  • React RenderProps模式超详细介绍
    render prop是一个技术概念。它指的是使用值为function类型的prop来实现React component之间的代码共享。 如果一个组件有一个render属性,并且这个
  • Vue中ref、reactive、toRef、toRefs、$refs的基本用法总

    Vue中ref、reactive、toRef、toRefs、$refs的基本用法总
    一、ref reactive 1.1.为什么需要ref、reactive ??? setup函数中默认定义的变量并不是响应式的(即数据变了以后页面不会跟着变),如果想让变量变
  • Javascript如何实现对象扁平化实例介绍

    Javascript如何实现对象扁平化实例介绍
    数组扁平化相信大家已经耳熟能详了,在被面试官问到如何实现数组扁平化你就偷着乐吧,但是相信有不少大佬在面试一些国内顶尖的大厂
  • Immer功能最佳实践示例教程

    Immer功能最佳实践示例教程
    一、前言 Immer 是mobx的作者写的一个 immutable 库,核心实现是利用 ES6 的 proxy,几乎以最小的成本实现了 js 的不可变数据结构,简单易用、体
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计