Skip to content

Latest commit

 

History

History
351 lines (178 loc) · 19.2 KB

tslint-rules.md

File metadata and controls

351 lines (178 loc) · 19.2 KB

TypeScript 代码风格指南

tslint-config-chweb

1. 这些规则能避免 TypeScript 编译错误

  • adjacent-overload-signatures - 方法重载必须放在相邻的位置。详情

  • ban-ts-ignore - 禁止使用 // @ts-ignore详情

  • ban-types - 禁止使用特定的类型作为类型声明,如 Function, Object, String, Number 等 JavaScript 构造函数,而应该使用 () => void, object, string, number 等 TypeScript 类型声明关键字。详情

  • member-access - 本规范关闭此规则。

    本规范不强制在公共成员前面声明 public 关键字,但需注意,在 TypeScript 中,默认是 public

  • member-ordering - 本规范规定类成员属性的顺序:静态成员 应该在 实例成员 的前面。详情

  • no-any - 本规范关闭此规则。

    在本规范中,在任何时候你都可以使用any声明类型,但是在大多数你明确知道类型结构的情况下应避免使用any

  • no-empty-interface - 禁止空的接口声明。

    空的接口声明没有任何意义,应尽量避免。

  • no-inferrable-types - 禁止给已初始化为 number, string, 或 boolean 类型的变量显示声明类型。详情

  • no-internal-module - 禁止声明内部的 module

  • no-magic-numbers - 本规范关闭此规则。

    虽然本规范中并不强制要求必须规避“魔法数字”,但是使用枚举类型代替“魔法数字”能大大提高代码的可读性。

    了解什么是魔法数字

  • no-namespace - 禁止声明内部的 modules 和 namespaces,但可以使用 declare 关键字将其申明为对外模块或命名空间。详情

  • no-non-null-assertion - 禁止使用 non-null 断言操作符 !详情

  • no-parameter-reassignment - 禁止对函数的参数重新赋值。详情

  • no-reference - 本规范关闭此规则。

  • no-unnecessary-type-assertion - 禁止无用类型断言。详情

  • no-var-requires - 禁止使用var module = require("module")这种格式引入模块,应该使用 ES2015 的模块引入,或者 import foo = require('foo')详情

  • only-arrow-functions - 必须使用箭头函数,除非函数声明或是命名函数。详情

  • prefer-for-of - 使用 for 循环遍历数组时,如果 index 仅用于获取成员,则必须使用 for of 循环替代 for 循环。详情

  • unified-signatures - 若两个重载函数能通过联合类型或可选参数或 rest 参数合并,则尽可能的合并。详情

2. 这些规则能检查出 JS 编程中的常见错误,或者一些容易产生错误的混淆构造:

  • await-promise - await 后面的值必须是 Promise 对象。详情

  • ban-comma-operator - 禁止使用逗号操作符。详情

  • ban - 指定应该禁止的方法或全局函数。

    本规范无特殊配置,可根据需要指定应该禁止的特定方法或全局函数。详见

  • curly - if / for / do / while 语句必须使用大括号括起来,但允许在同一行的情况下省略花括号。详情

  • forin - for ... in 语句中,必须使用 if 语句过滤使用。详情

  • function-constructor - 禁止使用原生函数构造器(Function)创建函数。详情

  • label-position - 只能在 do/for/while/switch 语句中使用 label

    JavaScript 中的标签只能与 breakcontinue 结合使用,这些结构用于循环流控制。 虽然理论上你可以在 JS 中的任何块语句中使用标签,但这样做被认为是糟糕的代码结构。

  • no-arg - 禁止使用 arguments.callee

    参考 MDN 了解为什么应避免使用 arguments.callee

  • no-conditional-assignment - 禁止在条件判断语句中赋值。

    禁止在do-while, for, if, while 以及 三元表达式中的条件判断语句中进行赋值。实际上在条件判断语句中赋值大多是书写错误(如 if (var1 = var2), 实际上你应该是想要 if (var1 == var2)),本规范能帮你找出这些书写错误。

  • no-console - 禁止使用的 console 方法。详情

  • no-construct - 禁止访问 String, Number, 和 Boolean 构造器。详情

  • no-debugger - 禁止使用 debugger 语句。debugger方法应避免出现在生产代码中。

    你可以在 tslint.json 中动态配置此规则:"no-debugger": process.env.NODE_ENV === 'production',并配合 webpack 的 UglifyJsPlugin 插件来保证生产环境中没有debugger相关的方法调用。

  • no-duplicate-super - 禁止在构造函数中重复调用 super()

  • no-duplicate-switch-case - 禁止在 switch 语句中出现重复的 case

  • no-duplicate-variable - 禁止在同一块级作用域中出现相同的变量声明。

  • no-dynamic-delete - 禁止将 delete 操作符用于动态计算的 key

  • no-empty - 禁止空的代码块。

  • no-eval - 禁止使用 eval 方法。

  • no-for-in-array - 禁止对数组使用 for-in 来遍历元素。详情
  • no-misused-new - 禁止在接口中定义 constructor,或在类中定义 new详情
  • no-object-literal-type-assertion - 禁止对对象字面量进行类型断言(断言为 any 是允许的)。详情
  • no-shadowed-variable - 禁止变量名与上层作用域内的定义过的变量名重复。详情

  • no-sparse-arrays - 禁止在数组中出现连续的逗号。详情

  • no-string-literal - 若在没必要使用字符串字面量访问对象属性时,禁止使用字符串字面量访问属性。如允许obj["prop-erty"] ,禁止obj["property"]( 应该写为 obj.property)。

  • no-string-throw - 抛出异常时禁止直接抛出字符串,而应当抛出 Error 对象。详情

  • no-switch-case-fall-through - switchcase 必须 returnbreak

  • no-tautology-expression - 禁止将两个完全一样的变量或字面量做比较,如 '1' === '1', foo === foo, 1 > 1

  • no-this-assignment - 禁止将 this 赋值给其他变量,但允许对 this 进行解构赋值。

  • no-unsafe-finally - 禁止在 finally 代码块中使用诸如 return, continue, breakthrows 的流程控制语句。详情

  • no-unused-expression - 禁止没使用的表达式。

  • no-var-keyword - 禁止使用 var 指令,应该使用 letconst

  • no-void-expression - 关闭此规则

  • restrict-plus-operands - 使用 + 运算符的时候,前后变量的类型必须一样。详情
  • triple-equals - 除了与 null 比较外,必须使用 ===!== ,禁止使用 ==!=,。

  • typeof-compare - 关闭此规则,tsc 自带了此功能。

  • use-isnan - 必须使用 isNaN(foo) 而不是 foo === NaN

3. 这些规则可以使代码更容易维护。

  • max-classes-per-file - 单个文件中只能定义 1 个类。

  • max-file-line-count - 单个文件代码不超过 1000 行。

  • no-duplicate-imports - 禁止出现多条从同一个模块导入的语句,应该将其合并为一条语句。详情
  • prefer-const - 不再修改的变量必须使用 const 声明。

  • prefer-readonly - 如果私有成员变量在构造函数之外不会被修改,则必须使用 readonly 修饰符。

4. 这些规则将使你的代码风格保持一致。

  • array-type - 统一数组类型声明方式:简单类型的数组必须使用 T[], 复杂类型的数组必须使用 Array<T | S>详情
  • arrow-return-shorthand - 建议将 () => { return x; } 简写为 () => x
  • class-name - 必须使用帕斯卡命名法(即大驼峰命名法)来命名类或接口。详情
  • interface-over-type-literal - 避免使用 type 声明接口类型。详情
  • newline-per-chained-call - 链式调用的方法应另起一行。详情

  • no-angle-bracket-type-assertion - 禁止使用尖括号进行类型断言,应使用 as 关键字。

  • no-reference-import - 如果导入过某个类型,禁止再使用 reference (<reference types="foo" />) 引用该类型。
  • no-unnecessary-initializer - 禁止没必要的初始化。如 let 声明的变量不应该将其初始化为 undefined ,因为他默认就是 undefined详情
  • object-literal-key-quotes - 索引类型的对象,需要引号的key 必须使用引号,不需要引号的key 一定不加引号。详情

  • object-literal-shorthand - 强制使用对象的简写方式。如 { foo: foo } 应写为 { foo }

  • one-line - else,catch,finally,{ 应该与上一个结束的花括号在同一行。

  • one-variable-per-declaration - 每个变量应单独声明,let a,b,c; 这种是不允许的。详情

  • ordered-imports - import 语句排序与分组。详情

  • prefer-method-signature - 方法声明应该这样声明:foo(): void,而不是 foo: () => void

  • prefer-switch - 如果 if ... else if 语句中,对同一变量只使用了 === 进行条件判断超过 4 个,则应该使用 switch 语句。

  • space-before-function-paren - 函数左圆括号前的空格规则。
  • variable-name - 变量名规范:禁止使用关键字作为变量名;驼峰命名法(lowerCamelCase);帕斯卡命名法(PascalCase);下划线开头的变量名(_leadingUnderscore);蛇形命名法(snake_case)。详情

5. 这些规则强制以相同的行为使用空白符和标点符号。

  • align - 如果方法声明的参数,方法调用的参数,对象属性,数组以及类成员是纵向排列的话,一定要对齐。详情

    本规范中的配置: "align": [true, "parameters", "statements"]

  • arrow-parens - 箭头函数参数必须用圆括号括起来,但如果只有一个参数的话则不允许使用圆括号。详情

  • eofline - 每个文件必须以空行结尾。

  • import-spacing - import 语句中的关键字(如 import, as, *, from)之间应该有一个空格。详情

  • indent - 使用 2 空格 缩进。

  • jsdoc-format - JS 文档注释格式(以/**开头的注释)。详情

  • max-line-length - 一行不能超过 120 个字的长度。
  • new-parens - new 一个对象时,必须使用圆括号。详情

  • no-consecutive-blank-lines - 禁止连续的空行

  • no-irregular-whitespace - 禁止特殊空白符(如全角空格)。

  • no-trailing-whitespace - 禁止结尾的空白符。

  • quotemark - 必须使用单引号,JSX 属性必须用双引号。详情

  • semicolon - 语句必须以分号结束。

  • trailing-comma - 对象和数组的最后一个元素的逗号:多行时必须有最后一个逗号,单行时不能有最后一个逗号。

  • typedef-whitespace - 类型标注的冒号左侧 一定没有 空格,右侧 一定有 空格。详情

  • whitespace - 其他的一些空白符规则。详情

TSLint 中不包含的规则(新增)

  • no-constant-condition - 禁止在条件判断语句中使用常量表达式。详情

  • no-label - 禁止使用 label。