@gooddata/tslint-config
是 GoodData 自己使用的 TSLint 配置,该配置包含了 GoodData 的代码规范以及最佳实践。本文将介绍如何在前端项目中集成 @gooddata/tslint-config
这个 npm 包。同时,我们会详细介绍每个配置项的意义和使用建议。
安装
在项目根目录下执行以下命令安装该 npm 包:
npm install --save-dev @gooddata/tslint-config
配置 TSLint
在项目根目录下创建一个 tslint.json
配置文件,并将以下内容复制进去:
{ "extends": [ "@gooddata/tslint-config" ] }
这里通过 "extends"
属性继承了 @gooddata/tslint-config
的配置项。当然,在这之前你需要确保安装了 tslint
。如果没有,可以执行以下命令:
npm install --save-dev tslint
配置项
接下来,我们将详细介绍 @gooddata/tslint-config
包含的配置项及其意义和使用建议。
align
意义:强制对齐符号的位置。
使用建议:将对齐符号 =
、:
、(
等归纳在一起,有助于代码的可读性。
示例代码:
-- -------------------- ---- ------- -- ---- ----- - - -- ----- - - -- ----- --- - - -- - -- - - -- -- --- ----- - - -- ----- - - -- ----- --- - - -- - -- - -- --- - --
ban
意义:禁止使用特定的函数或属性。
使用建议:在某些情况下,某些函数或属性可能有潜在的风险或已被废弃,禁止使用能有效避免不必要的错误和浪费。
示例代码:
-- -------------------- ---- ------- -- ---- ----- - - - - -- ----- - - --- -- ----------- -- ---- - --- -- --- ------------------- ----------- -- ---- ------ ----- --- - -------- ---------- - ---- -- ----------
class-name
意义:强制驼峰式命名。
使用建议:驼峰式命名法是一种通用的命名规范,有助于提高代码的可读性、可维护性以及跨平台兼容性。
示例代码:
// good class HelloWorld {} // bad class hello_world {} // 不符合驼峰式命名法
comment-format
意义:强制注释的格式。
使用建议:统一注释的格式,有助于代码的可读性以及跨平台兼容性。
示例代码:
-- -------------------- ---- ------- -- ---- --- - --------- -- -- --- -- - --------- --
completed-docs
意义:强制注释文档的完整性。
使用建议:编写完整的注释文档有助于其他开发人员理解代码、方便后续维护。需要注意的是,完整的注释文档应当包括函数或类的参数、返回值、用法示例等信息。
示例代码:
-- -------------------- ---- ------- -- ---- --- - ------- - ------ - ---- - ------ - ---- - -------- ---- -- -------- ------ ------- -- -------- ------ - ------ - - -- - -- --- -------- ------ ------- -- -------- ------ - ------ - - -- -
curly
意义:强制使用花括号包裹语句块。
使用建议:使用花括号包裹语句块可以提高代码的可读性和可维护性,避免出现意外的结果。
示例代码:
// good if (true) { console.log('Hello, world!'); } // bad if (true) console.log('Hello, world!'); // 缺少花括号
cyclomatic-complexity
意义:限制函数的圈复杂度。
使用建议:圈复杂度是衡量函数复杂度的一种方法,通常认为圈复杂度超过 10 时就需要重构。限制函数的圈复杂度有助于降低代码的复杂度,提高代码的可读性和可维护性。
示例代码:
-- -------------------- ---- ------- -- ---- -------- ------ ------- -- -------- ------ - --- ------ - - - -- -- ------- - ---- - ------ - ---- - ------ ------- - -- --- -------- ------ ------- -- -------- ------ - --- ------ - - - -- --- ---- - - -- - - --- ---- - ------ -- -- - ------ ------- -
import-spacing
意义:强制导入语句的空格使用。
使用建议:统一导入语句的空格使用,有助于提高代码的可读性和美观度。
示例代码:
// good import { sum } from './utils'; // bad import{sum}from'./utils'; // 不符合空格使用规范
interface-name
意义:强制大写字母开头的接口名称。
使用建议:大写字母开头的接口名称有助于提高代码的可读性和可维护性,避免与变量或函数名称混淆。
示例代码:
-- -------------------- ---- ------- -- ---- --------- ----- - ----- ------- ---- ------- - -- --- --------- ----- - ----- ------- ---- ------- -
member-access
意义:强制对类成员的访问范围进行显示声明。
使用建议:显示声明类成员的访问范围有助于提高代码的可读性和可维护性。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------- - ------- ------ ------- --- ------- ------ - ------ ----------- - --- ----------- ------- - ---------- - ------ - - -- --- ----- ------- - ------- ------ ------- ---- - -------- ------ -- --------------- -
no-consecutive-blank-lines
意义:限制连续的空白行。
使用建议:适当使用空白行可以提高代码的可读性,但过多的空白行则会降低代码的紧凑性和美观度。
示例代码:
-- -------------------- ---- ------- -- ---- -------- -------- ---- - ------------------- --------- - -------- -- --- -------- -------- ---- - ---------------------- - -------- -- ----------
no-construct
意义:禁止直接调用构造器。
使用建议:直接调用构造器可能会导致未知的副作用,应该使用工厂函数或静态方法来创建对象。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------- - ------------------- -------- ------ ------- -- ------ ------------ -------- ------- - ------ --- -------------- - - -- --- ----- ------- - ------------------- -------- ------ ------- -- - ----- --- - --- --------------- --------- -- ---------
no-duplicate-case
意义:禁止 switch
语句中重复的 case
语句。
使用建议:重复的 case
语句可能会导致意外的结果,应该避免使用。
示例代码:
-- -------------------- ---- ------- -- ---- -------- ----------- -------- ---- - ------ ------ - ---- ------ ------------------- ------- ------ ---- -------- ------------------- --------- ------ -------- ------------------- ----------- - - -- --- -------- ----------- -------- ---- - ------ ------ - ---- ------ ------------------- ------- ------ ---- ------ -- --- ---- -- ------------------- ------- ------ -------- ------------------- ----------- - -
no-duplicate-parameter-names
意义:禁止函数参数中重复的名称。
使用建议:重复的参数名称会导致命名冲突,应该避免使用。
示例代码:
-- -------------------- ---- ------- -- ---- -------- ------ ------- -- -------- ------ - ------ - - -- - -- --- -------- -------- ------- -- -------- ------ - -- ------- ------ - - -- -
no-eval
意义:禁止使用 eval()
函数。
使用建议:eval()
函数会将字符串转换为可执行的代码,可能会导致意外的结果和安全隐患,应该禁止使用。
示例代码:
// good const a = 1 + 2; // bad eval('alert("Hello, world!")'); // 禁止使用 eval()
no-implicit-dependencies
意义:禁止隐式的依赖导入。
使用建议:显式声明依赖关系有助于提高代码的可读性和可维护性,避免出现意外的错误和冲突。
示例代码:
// good import * as _ from 'lodash'; // bad import * as React from 'react'; // 没有显式声明依赖关系
no-return-await
意义:禁止在返回语句中使用 await
。
使用建议:在返回语句中使用 await
可能会导致意外的结果,长度代码可读性,应该禁止使用。
示例代码:
-- -------------------- ---- ------- -- ---- ----- -------- -------- --------------- - ------ ------- -------- - -- --- ----- -------- -------- --------------- - ------ ----- -------------------------- -- ---------- ----- -
no-this-assignment
意义:禁止将 this
分配给局部变量。
使用建议:将 this
分配给局部变量可能会导致出现意外的问题和错误,应该避免使用。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------- - ------- -------- ------ ------- ----------------- ------- - ---------- - ----- - --------- - ------------------------ - - -- --- ----- --------- - ------- ------ ---------- ------------- - ---------- - ----- -- --- ---- ------- - -
no-unconditional-jump
意义:禁止不带条件的跳转语句。
使用建议:不带条件的跳转语句可能会造成意外的结果和执行异常,应该避免使用。
示例代码:
-- -------------------- ---- ------- -- ---- -------- -------- ---- - ------------------- --------- ------- - -- --- -------- -------- ---- - ----- ------ - ---------------------- ------ -- ----------- - -
no-unsafe-any
意义:禁止使用 any
类型。
使用建议:使用 any
类型可能会导致安全隐患和代码的不可预测性,应该尽量避免使用。
示例代码:
-- -------------------- ---- ------- -- ---- --------- ----- - ----- ------- ---- ------- - -------- ---------- ----- - ------ - ----- ------ ---- -- -- - -- --- -------- --------- --- - ------ ------- -------- -
no-var-requires
意义:禁止使用 require
语句。
使用建议:require
语句只适用于 Node.js 环境下,不适用于浏览器环境,应该使用 import
语句代替。
示例代码:
// good import * as _ from 'lodash'; // bad const _ = require('lodash'); // 禁止使用 require 语句
object-literal-key-quotes
意义:要求对象字面量属性名使用引号。
使用建议:为对象字面量属性名使用引号有助于统一代码风格和规范,可读性更佳。
示例代码:
-- -------------------- ---- ------- -- ---- ----- --- - - ------- ------ ------ -- -- -- --- ----- --- - - ----- ------ -- ------ ---- -- --
object-literal-sort-keys
意义:强制对象字面量属性的排序顺序。
使用建议:强制对象字面量属性的排序顺序有助于统一代码风格和规范,可读性更佳。
示例代码:
-- -------------------- ---- ------- -- ---- ----- --- - - ---- --- ----- ----- -- -- --- ----- --- - - ----- ------ ---- -- --
only-arrow-functions
意义:强制使用箭头函数。
使用建议:箭头函数是一种简洁、清晰的函数表达式,使用箭头函数可以提高代码的可读性和可维护性。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ----- - --- ---- -- - ------------------- --------- -- -- --- -------- -------- ---- - ---------------------- -
prefer-const
意义:建议使用 const
声明变量。
使用建议:使用 const
声明变量可以保证变量不会被修改,有助于减少意外的错误和冲突。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ----- - --- -- --- --- ------ ---- -- ------ - ------------------ - -- --- --- ----- - -- ----- ------ - --- - ------------------- -------- -
prefer-method-signature
意义:强制使用方法签名而非属性签名。
使用建议:使用方法签名可以保持代码的一致性和易读性,提高代码的可维护性。
示例代码:
-- -------------------- ---- ------- -- ---- ----- ------- - ------- -------- ------ ------- ----------------- ------- - ---------- - ----- - ---------- ------ - ------ ----------- - - -- --- ----- --------- - ------- -------- ----- ------- ---------------- ------- - --------- - ---- - --- ------ ------ - ------ ---------- -- ---- - -
prefer-template
意义:强制使用模板字符串。
使用建议:使用模板字符串可以简化代码,提高代码的可读性和可维护性
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/they-tslint-config