tslint配置
- 与TypeScript功能有关的错误
- ban-ts-ignore
// 禁止使用@ ts-ignore注释 "rules": { "ban-ts-ignore": true }
- ban-types
// 禁止特定类型的被使用。不被用来禁止相应的运行对象。 "ban-types": [true, [{}], [""]]
- member-access
// 需要类成员明确可见性的声明 "member-access": false, "member-access": true, // 禁止向指定公众开放,因为这是默认的 "member-access": [true, "no-public"], // 强制对get/set访问明确的知名度 "member-access": [true, "check-accessor"], // 强制对构造明确的知名度 "member-access": [true, "check-constructor"], // 强制执行参数属性明确的知名度 "member-access": [true, "parameter-property"],
- member-ordering
// 强制实施成员排序
- no-any
// 不允许any作为类型声明 "no-any": true // 允许any[] "no-any": [true, {"ignore-rest-args": true}]
- no-empty-interface
// 不允许空接口 "no-empty-interface": true // error example interface I { }
- no-for-in
// 不允许对Array使用for-in "no-for-in": true
- no-import-side-effect
// 避免import语句副作用 "no-import-side-effect": true, "no-import-side-effect": [true, {"ignore-module": "(\\.html|\\.css)$"}]
- no-inferrable-types
// 不允许将显式声明的变量或参数指定类型为一个number,string或boolean "no-inferrable-types": true // 允许为函数的参数作解释 "no-inferrable-types": [true, "ignore-params"] // 允许指定为类性质的inferrable类型注释。 "no-inferrable-types": [true, "ignore-params", "ignore-properties"]
- no-internal-module
// 禁止使用module来定义命名空间 "no-internal-module": true
- no-magic-numbers
// 不允许被使用的数字常量值被外部变量赋值,当未指定的允许值的列表,-1,0和1是默认允许。 // 数字忽略列表。 no-magic-numbers": [true, 1, 2, 3] // 指定特殊的魔法数字被允许 "no-magic-numbers": [true, {"allowed-numbers": [1, 2, 3], "ignore-jsx": true}]
- no-namespace
// 禁止使用内部模块和命名空间 "no-namespace": true, // 允许申报命名空间... {}来描述的外部API。 "no-namespace": [true, "allow-declarations"]
- no-non-null-assertion
// 不允许非空的断言使用!后缀运算符 "no-non-null-assertion": true // success examples function foo(instance: MyClass | undefined) { instance!.doWork(); }
- no-parameter-reassignment
// 不允许重新分配参数(为参数重新赋值) "no-parameter-reassignment": true
- no-reference
// 不允许<reference path=>导入文件 "no-reference": true
- no-var-requires
// 不允许使用require,使用import替代 "no-var-requires": true // error example var module = require("module") // success example import foo = require('foo')
- only-arrow-functions
// 不允许非箭头函数的函数表达式 "only-arrow-functions": true // allow-declarations:允许独立的函数声明 // allow-named-functions:允许函数 function foo() {} 而不是function() {}. "only-arrow-functions": [true, "allow-declarations", "allow-named-functions"]
- prefer-for-of
// 推荐使用for of 循环 "prefer-for-of": true
- promise-function-async
// 任何一个函数或者方法要求返回一个异步都要求带有async标记 "promise-function-async": true
- ban-ts-ignore
- Js相关功能的错误
- ban-comma-operator
// 不允许使用逗号操作符。 "ban-comma-operator": true
- curly
// if,while,do,for强制实施{} "curly": true // error example if (x > 0) doStuff(); if (x > 0) doStuff(); // 禁止任何不必要的大括号。 "curly": [true, "ignore-same-line"] // success example if (x > 0) doStuff(); // error example if (x > 0) doStuff() // "curly": [true, "as-needed"] // success example if (x > 0) doStuff(); if (x > 0) { customerUpdates.push(getInfo(customerId)); return customerUpdates; } // error example if (x > 0) { doStuff(); }
- forin
// 使用for in语句时,强制进行hasOwnProperty检查 "forin": true
- function-constructor
// 使用构造函数的方式,类型得不到检查,用工厂函数返回自己的功能。 "function-constructor": true // success example let addNumbers = (a, b) => a + b; // error example let addNumbers = new Function("a", "b", "return a + b");
- import-blacklist
// 禁止直接导入库,要求用户直接导入他们只需要子模块 "import-blacklist": true
- label-position
// 这条规则只允许标签上do for while switch使用标签 "label-position": true
- no-async-without-await
// 异步函数必须包含一个await或者返回一个声明 "no-async-without-await": true // success example async function f() { await fetch(); } const f = async () => { await fetch(); }; const f = async () => { return 'value'; }; // error example async function f() { fetch(); } async function f() { async function g() { await h(); } }
- no-bitwise
// 禁止&, &=, |, |=, ^, ^=, <<, <<=, >>, >>=, >>>, >>>=, ~ 的使用 "no-bitwise": true
- no-conditional-assignment
// 禁止条件语句进行赋值操作 "no-conditional-assignment": true // error example if (var1 = var2)
- no-console
// 禁止console,console无法生成合适的生产环境代码 "no-console": [true, "log", "error"]
- no-construct
// 不允许访问string,number,和boolern的构造函数。 "no-construct": true
- no-debugger
// 禁止debugger语句 "no-debugger": true
- no-duplicate-super
// 禁止在同一个constructor构造函数出现两次super() "no-duplicate-super": true
- no-duplicate-switch-case
// 防止出现重复switch语句 "no-duplicate-switch-case": true
- no-duplicate-variable
// 在同一个块级区域内禁止申明相同变量 "no-duplicate-variable": true
- no-dynamic-delete
// 计算表达式中禁止使用delete命令,可以用map代替 "no-dynamic-delete": true
- no-empty
// 函数体不允许空函数体不允许空 "no-empty":true
- no-eval
// 禁止eval函数调用(eval函数具有完全权限去执行任意代码。 "no-eval": true
- no-floating-promises
// 由函数返回的结果必须妥善处理。 "no-floating-promises": true
- no-for-in-array
// 禁止对Array进行for in 循环 "no-for-in-array": true
- no-implicit-dependencies
// 不允许导入模块未列为项目的package.json依赖 "no-implicit-dependencies": true
- no-inferred-empty-object-type
// 禁止在函数或者构造函数中对{}空对象进行类型断言 "no-inferred-empty-object-type": true
- no-invalid-template-strings
// 对非模版的string在使用${}时发出警告 "no-invalid-template-strings": true
- no-invalid-this
// 除类以外,不允许使用this关键字 "no-invalid-this": true
- no-misused-new
// 尝试为接口或者new的Class类重新定义构造函数时发出警告 "no-misused-new": true
- no-null-keyword
// 禁止使用空的关键字文字。 "no-null-keyword": true
- no-null-undefined-union
// 禁止显式申明或者隐式返回类型为null或者underfind的值 "no-null-undefined-union": true
- no-object-literal-type-assertion
// 禁止对象出现类型断言表达式,null以及unknown还是被允许的。 "no-object-literal-type-assertion": true // success example let foo = {} as any; let foo = {} as unknown; let foo = {} as any as Foo; let foo = {} as unknown as Foo; // error example let foo = {} as Foo; let foo = <Foo>{};
- no-restricted-globals
// 不允许特定的全局变量。 "no-restricted-globals": [true, "name", "length", "event"]
- no-return-await
// 禁止不必要的return await。 "no-return-await": true
- no-shadowed-variable
// 不允许阴影变量声明。 "no-shadowed-variable": [ true, { "class": true, "enum": true, "function": true, "interface": false, "namespace": true, "typeAlias": false, "typeParameter": false, "underscore": false } ]
- no-sparse-arrays
// 禁止数组含有缺失的元素。 "rules": { "no-sparse-arrays": true } // error example const arr: string[] = ['elemenet1',, 'element2'];
- no-switch-case-fall-through
// 不允许通过case语句下降。 "no-switch-case-fall-through": true // error example switch(foo) { case 1: someFunc(foo); /* falls through */ case 2: case 3: someOtherFunc(foo); }
- no-this-assignment
// 禁止对this进行不必要的引用 "no-this-assignment": true // error example const self = this; setTimeout(function () { self.doWork(); });
- no-unused-expression
// 不允许未使用的表达式语句。 "no-unused-expression": true
- no-use-before-declare
// 变量声明前禁止使用 "no-use-before-declare": true
- no-var-keyword
// 禁止使用var申明变量。 "no-var-keyword": true
- restrict-plus-operands
// 当添加两个变量,操作数必须都是number类型或string类型。 "restrict-plus-operands": true
- static-this
// 禁止在静态方法中使用this "static-this": true
- strict-string-expressions
// 禁止隐式toString()的调用 "strict-string-expressions": true // 允许null, undefined和never的隐式调用 "strict-string-expressions": [true, {"allow-empty-types": true}]
- switch-default
// switch循环语句需要有defalut默认值 "switch-default": true
- triple-equals
// 使用'===''!=='替代'==''!=' "triple-equals": true // 当比较值为null时允许使用'==''!=' "triple-equals": [true, "allow-null-check"] // 当比较值为underfind时允许使用'==''!=' "triple-equals": [true, "allow-undefined-check"]
- typeof-compare
// 校验typeof的值为string类型 "typeof-compare": true
- unnecessary-constructor
// 禁止空构造函数,JavaScript会隐式创建一个constructor构造函数,不需要手动去添加。 "unnecessary-constructor": true // 检查不必要的构造函数的参数 "unnecessary-constructor": [true, {"check-super-calls": true}]
- use-isnan
// 只允许使用isNaN方法检查数字是否有效 "use-isnan": true
- ban-comma-operator
- 代码维护规则
- cyclomatic-complexity
// 圈复杂度衡量,圈复杂度越高,程序代码的判断逻辑越复杂,可能质量越低低且难于测试和维护 "cyclomatic-complexity": true // 设置圈复杂度最大值,默认为20 "cyclomatic-complexity": [true, 20]
- deprecation
// 使用已弃用的API时会发出警告。 "deprecation": true
- no-default-export
// 禁止默认export,使用有效名称导出模块 "no-default-export": true
- max-file-line-count
// 确保每个页面最多多少行代码 "max-file-line-count": [true, 300]
- no-require-imports
// 禁止使用require() "no-require-imports": true
- object-literal-sort-keys
// 检查object对象中key值排序 "object-literal-sort-keys": true // success example // 默认按照首字母排序 let o = { bar: 2, foo: 1 }; // 按照接口排序 interface I { foo: number; bar: number; } let o: I = { foo: 1, bar: 2 };
- prefer-const
// 尽量去使用const来代替let或者var(不推荐使用) "prefer-const": true
- prefer-readonly
// private变量应该为readonly(只读) "prefer-readonly": true
- cyclomatic-complexity
- 代码规范
- array-type
// arrays数组要用'T[]'或者'Array'来指定类型 // 强制使用T[]来作为数组指定类型 "array-type": [true, "array"] // 强制使用Array<T>来作为数组指定类型 "array-type": [true, "generic"] // 如果数组是一个简单类型,强制使用T[] "array-type": [true, "array-simple"]
- arrow-return-shorthand
// 箭头函数() => x;来代替() => { return x;},减少不必要的return "arrow-return-shorthand": true // 如果指定了多行,那么这将发出警告,即使该函数跨多行 "arrow-return-shorthand": [true, "multiline"]
- binary-expression-operand-order
// 数字字面量必须在加号的右边,即禁止1 + x "binary-expression-operand-order": true
- callable-types
// 一个接口可调用,需要声明为 Function 类型 "callable-types": true
- class-name
// 大驼峰命名法命名类名和接口名 "class-name": true // success example class MyClass { } interface MyInterface { }
- callable-types
// 强制单行注释格式 "comment-format": [true, "check-space", "check-uppercase", "allow-trailing-lowercase"] // check-space 以空格开头 // comment // check-lowercase 第一个字符为小写 // check-uppercase 第一个字符为大写 // allow-trailing-lowercase 允许只有第一个为大写
- encoding
// 强制UTF-8编码 "encoding": true
- file-name-casing
// 文件名称命名规范 "file-name-casing": [true, "camel-case"] // camel-case 小驼峰 fileName.ts // pascal-case 大驼峰 FileName.ts // kebab-case -命名 file-name.ts // snake-case _命名 file_name.ts // ignore 忽略 // 不同文件对应命名 "file-name-casing": [true, {".tsx": "pascal-case", ".ts": "camel-case"}]
// 强制'+=''-='来执行运算 "increment-decrement": true
// 接口名称以'|'开头 "interface-name": [true, "always-prefix"] "interface-name": [true, "never-prefix"]
// 链式调用方法换行,保持代码垂直 "newline-per-chained-call": true
// 类型断言的形式替换类型声明 as Type 替换 <Type> "no-angle-bracket-type-assertion": true
// 比较对象为boolean时,报出警告 "no-boolean-literal-compare": true // warn example x === true
// 无必要的包装回调函数 "no-unnecessary-callback-wrapper": true // warn example x => f(x)
// 禁止无意义的初始赋值为underfind "no-unnecessary-initializer": true
// 强制统一对象属性的调用方式 // 对象属性名称应该始终加'' "object-literal-key-quotes": [true, "always"] // 对象属性名称需要加''时加'' "object-literal-key-quotes": [true, "as-needed"] // 对象属性名称要么全加''要么全不加 "object-literal-key-quotes": [true, "consistent"] // 对象属性名称有一个需要加''则全部需要加'' "object-literal-key-quotes": [true, "consistent-as-needed"]
// 检查流程控制代码的衔接部分和空格 "one-line": [true, "check-catch", "check-finally", "check-else","check-whitespace"]
// 在一个声明语句中不允许多个变量定义。 "one-variable-per-declaration": true // 允许他们在for循环。 "one-variable-per-declaration": [true, "ignore-for-loop"] // error example const foo = 1, bar = '2';
// 必须使用foo(): void而不是foo: () => void "prefer-method-signature": true
// 当if中只有===时,必须使用switch替换if "prefer-switch": true // 可以设置最小case值,默认为3 "prefer-switch": [true, {"min-cases": 2}]
// 使用模版拼接而非字符串拼接 "prefer-template": true //单个字符串拼接是允许的 "prefer-template": [true, "allow-single-concat"] // success example const myString: string = x + ' is equals 1'; // error example const myString: string = x + ' is equals ' + y;
// 当没有初始值的时候,必须使用while而不是for "prefer-while": true
// 当没有初始值的时候,必须使用while而不是for "prefer-while": true
// 用return;替换 return undefined;和return一个空的函数 "return-undefined": true
// 用return;替换 return undefined;和return一个空的函数 "return-undefined": true
// 函数名前必须有空格 "space-before-function-paren": true //
// 括号内首尾禁止有空格,空括号除外 "space-before-function-paren": true
// switch语句的最后一项禁止有break "switch-final-break": true // 必须全部都存在break "switch-final-break": [true, "always"]
// 字面类型的每个成员都必须有分号 "switch-final-break": true
// 禁止无效的bind "unnecessary-bind": true
// 禁止无效的else当if的代码块以break, continue, return, throw结尾 "unnecessary-else": true // 允许else if "unnecessary-else": [true, {"allow-else-if": true}] // success example if (someCondition()) { return; } // some code here // error example if (someCondition()) { return; } else { // some code here }
// 检查各种错误的变量名 "variable-name": { "options": [ "ban-keywords", "check-format", "allow-leading-underscore", "allow-pascal-case" ] }
- array-type
- 格式化空格及标点
// 强制执行垂直对齐 "align": [true, "parameters", "statements"]
// 箭头函数的参数必须有小括号 "arrow-parens": true // 一个参数没有必要有括号 "arrow-parens": [true, "ban-single-arg-parens"]
// 文件最后一行必须有一个空行 "eofline": true
// import语句中,关键字之间的间距必须是一个空格 "import-spacing": true
// 一个缩进必须用四个空格替代 "indent": [true, "spaces"]
// 限制一行最大长度 "max-line-length": [true, 120]
// return语句前必须有空行 "newline-before-return": true
// 禁止一个或者多个空白行 "no-consecutive-blank-lines": true // 设置允许空白的行 "no-consecutive-blank-lines": [true, 2]
// 禁止使用特殊空白符包括string和注释 "no-irregular-whitespace": true
// 小数必须以0.开头,禁止以.开头,并且不能以0结尾 "number-literal-format": true
// 必须使用单引号 "quotemark": [true, "single", "avoid-escape", "avoid-template"] // 必须使用双引号 "quotemark": [true, "double", "jsx-double"]
// 行尾必须有分号 "semicolon": [true, "always"] // 行尾不能使用分号 "semicolon": [true, "never"]
// 限制对象、数组、解构赋值等的最后一项末尾是否需要逗号 "trailing-comma": [true, {"multiline": "always", "singleline": "never"}]
// 限制空格的位置 "whitespace": [true, "check-branch", "check-operator", "check-typecast"]