tslint-config-alloy
Version:
AlloyTeam TSLint 规则
758 lines (757 loc) • 30.3 kB
JSON
{
"adjacent-overload-signatures": {
"category": "typescript-specific",
"description": "重载的函数必须写在一起",
"ts-only": true
},
"ban-types": {
"category": "typescript-specific",
"description": "禁用特定的类型",
"reason": "该规则用于禁止某个具体的类型的使用",
"ts-only": true
},
"member-access": {
"category": "typescript-specific",
"description": "必须设置类的成员的可访问性",
"reason": "将不需要公开的成员设为私有的,可以增强代码的可理解性,对文档输出也很友好",
"ts-only": true,
"has-fixer": true
},
"member-ordering": {
"category": "typescript-specific",
"description": "指定类成员的排序规则",
"reason": "优先级:\n1. `static` > `instance`\n2. `field` > `constructor` > `method`\n3. `public` > `protected` > `private`",
"has-fixer": true
},
"no-any": {
"category": "typescript-specific",
"description": "禁止使用 `any`",
"reason": "太严格了",
"ts-only": true
},
"no-empty-interface": {
"category": "typescript-specific",
"description": "禁止定义空的接口",
"ts-only": true
},
"no-import-side-effect": {
"category": "typescript-specific",
"description": "禁止导入有副作用(立即执行)的模块,除了 `css`, `less`, `sass`, `scss`",
"reason": "有副作用(立即执行)的模块无法控制其执行过程"
},
"no-inferrable-types": {
"category": "typescript-specific",
"description": "禁止给一个初始化时直接赋值为 `number`, `string` 或 `boolean` 的变量显式的指定类型",
"reason": "可以简化代码,并且支持自动修复",
"ts-only": true,
"has-fixer": true
},
"no-internal-module": {
"category": "typescript-specific",
"description": "禁止使用 `module` 来定义命名空间",
"reason": "`module` 已成为 js 的关键字",
"ts-only": true,
"has-fixer": true
},
"no-magic-numbers": {
"category": "typescript-specific",
"description": "禁止使用魔法数字,仅允许使用一部分白名单中的数字",
"reason": "魔法数字无法理解"
},
"no-namespace": {
"category": "typescript-specific",
"description": "禁止使用 `namespace` 来定义命名空间",
"reason": "使用 es6 引入模块,才是更标准的方式。\n允许使用 `declare namespace ... {}` 来定义外部命名空间",
"ts-only": true
},
"no-non-null-assertion": {
"category": "typescript-specific",
"description": "禁止使用 non-null 断言(感叹号)",
"reason": "non-null 断言不安全,最好使用条件语句把 `null` 排除掉比较好",
"ts-only": true
},
"no-parameter-reassignment": {
"category": "typescript-specific",
"description": "禁止对函数的参数重新赋值"
},
"no-reference": {
"category": "typescript-specific",
"description": "禁止使用三斜线引入模块 `/// <reference path=\"foo\" />`",
"reason": "引入模块时应使用更先进的 `import` 语法\n三斜线仅能用于引入一个类型文件 `/// <reference types=\"foo\" />`"
},
"no-unnecessary-type-assertion": {
"category": "typescript-specific",
"description": "禁止无用的类型断言",
"reason": "Requires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"has-fixer": true,
"requires-type-info": true
},
"no-var-requires": {
"category": "typescript-specific",
"description": "禁止使用 `require` 来引入模块",
"reason": "统一使用 `import` 来引入模块,特殊情况使用单行注释允许 `require` 引入",
"ts-only": true
},
"only-arrow-functions": {
"category": "typescript-specific",
"description": "必须使用箭头函数,除非是单独的函数声明或是命名函数",
"reason": "统一使用箭头函数,避免 `this` 指向问题"
},
"prefer-for-of": {
"category": "typescript-specific",
"description": "使用 `for` 循环遍历数组时,如果 `index` 仅用于获取成员,则必须使用 `for of` 循环替代 `for` 循环",
"reason": "`for of` 循环更加易读"
},
"promise-function-async": {
"category": "typescript-specific",
"description": "`async` 函数的返回值必须是 `Promise`",
"reason": "有时 `async` 函数在某个分支是同步的,不需要返回 `Promise`\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"typedef": {
"category": "typescript-specific",
"description": "变量、函数返回值、函数参数等必须要有类型定义",
"reason": "大部分类型都可以依靠类型推论,没必要全部手动定义",
"ts-only": true
},
"typedef-whitespace": {
"category": "typescript-specific",
"description": "类型定义的冒号前面必须没有空格,后面必须有一个空格",
"ts-only": true,
"has-fixer": true,
"prettier": true
},
"unified-signatures": {
"category": "typescript-specific",
"description": "函数重载时,若能通过联合类型将两个函数的类型声明合为一个,则使用联合类型而不是两个函数声明",
"ts-only": true
},
"await-promise": {
"category": "functionality",
"description": "`await` 必须接受 `Promise`",
"reason": "promise-function-async 里已经允许 `async` 函数返回值为非 `Promise` 了,故也应该允许 `await` 接受非 `Promise`\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"ban": {
"category": "functionality",
"description": "禁用指定的函数或全局方法",
"reason": "用于限制某个具体的函数不能使用"
},
"ban-comma-operator": { "category": "functionality", "description": "禁止使用逗号操作符" },
"curly": {
"category": "functionality",
"description": "`if` 后面必须有 `{`,除非是单行 `if`",
"has-fixer": true
},
"forin": { "category": "functionality", "description": "`for in` 内部必须有 `hasOwnProperty`" },
"import-blacklist": {
"category": "functionality",
"description": "禁用指定的模块",
"reason": "用于限制某个具体的模块不能使用"
},
"label-position": {
"category": "functionality",
"description": "只允许在 `do`, `for`, `while` 或 `switch` 中使用 `label`",
"reason": "在任何情况都不应该使用 `label`"
},
"no-arg": { "category": "functionality", "description": "禁止使用 `arguments.callee`" },
"no-bitwise": {
"category": "functionality",
"description": "禁止使用位运算",
"reason": "位运算很常见"
},
"no-conditional-assignment": {
"category": "functionality",
"description": "禁止在分支条件判断中有赋值操作"
},
"no-console": {
"category": "functionality",
"description": "禁止使用 `console`",
"reason": "没必要禁止,会让 autofixOnSave 很不方便"
},
"no-construct": {
"category": "functionality",
"description": "禁止使用 `new` 来生成 `String`, `Number` 或 `Boolean`"
},
"no-debugger": {
"category": "functionality",
"description": "禁止使用 `debugger`",
"reason": "没必要禁止,会让 autofixOnSave 很不方便"
},
"no-duplicate-super": {
"category": "functionality",
"description": "禁止 `super` 在一个构造函数中出现两次"
},
"no-duplicate-switch-case": {
"category": "functionality",
"description": "禁止在 `switch` 语句中出现重复测试表达式的 `case`"
},
"no-duplicate-variable": {
"category": "functionality",
"description": "禁止出现重复的变量定义或函数参数名"
},
"no-dynamic-delete": {
"category": "functionality",
"description": "禁止 `delete` 动态的值",
"reason": "没必要限制"
},
"no-empty": {
"category": "functionality",
"description": "禁止出现空代码块,允许 `catch` 是空代码块"
},
"no-eval": { "category": "functionality", "description": "禁止使用 `eval`" },
"no-floating-promises": {
"category": "functionality",
"description": "函数返回值为 `Promise` 时,必须被处理",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"no-for-in-array": {
"category": "functionality",
"description": "禁止对 `array` 使用 `for in` 循环",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"no-implicit-dependencies": {
"category": "functionality",
"description": "禁止引入 `package.json` 中不存在的模块"
},
"no-inferred-empty-object-type": {
"category": "functionality",
"description": "禁止推论出的类型是空对象类型",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"no-invalid-template-strings": {
"category": "functionality",
"description": "禁止在非模版字符串中出现 `${}`"
},
"no-invalid-this": {
"category": "functionality",
"description": "禁止在类外面使用 `this`",
"reason": "禁止滥用 `this`,如需使用,在文件中局部禁用此规则即可"
},
"no-misused-new": {
"category": "functionality",
"description": "禁止在接口中定义 `constructor`,或在类中定义 `new`",
"ts-only": true
},
"no-null-keyword": {
"category": "functionality",
"description": "禁止使用 `null`",
"reason": "没必要限制",
"has-fixer": true
},
"no-object-literal-type-assertion": {
"category": "functionality",
"description": "禁止对对象字面量进行类型断言(断言成 `any` 是允许的)",
"ts-only": true
},
"no-return-await": {
"category": "functionality",
"description": "禁止没必要的 `return await`",
"reason": "`return await` 用起来没问题",
"has-fixer": true
},
"no-shadowed-variable": {
"category": "functionality",
"description": "禁止变量名与上层作用域内的定义过的变量重复",
"reason": "很多时候函数的形参和传参是同名的"
},
"no-sparse-arrays": {
"category": "functionality",
"description": "禁止在数组中出现连续的逗号,如 `let foo = [,,]`"
},
"no-string-literal": {
"category": "functionality",
"description": "禁止出现 `foo['bar']`,必须写成 `foo.bar`",
"has-fixer": true
},
"no-string-throw": {
"category": "functionality",
"description": "禁止 `throw` 字符串,必须 `throw` 一个 `Error` 对象",
"has-fixer": true
},
"no-submodule-imports": {
"category": "functionality",
"description": "禁止 `import` 模块的子文件",
"reason": "没必要限制"
},
"no-switch-case-fall-through": {
"category": "functionality",
"description": "`switch` 的 `case` 必须 `return` 或 `break`"
},
"no-this-assignment": {
"category": "functionality",
"description": "禁止将 `this` 赋值给其他变量,除非是解构赋值"
},
"no-unbound-method": {
"category": "functionality",
"description": "使用实例的方法时,必须 `bind` 到实例上",
"reason": "Requires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"no-unnecessary-class": {
"category": "functionality",
"description": "禁止定义没必要的类,比如只有静态方法的类",
"reason": "没必要限制"
},
"no-unsafe-any": {
"category": "functionality",
"description": "禁止取用一个类型为 `any` 的对象的属性",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"no-unsafe-finally": {
"category": "functionality",
"description": "禁止 `finally` 内出现 `return`, `continue`, `break`, `throw` 等",
"reason": "`finally` 会比 `catch` 先执行"
},
"no-unused-expression": { "category": "functionality", "description": "禁止无用的表达式" },
"no-use-before-declare": {
"category": "functionality",
"description": "变量必须先定义后使用",
"reason": "循环引用没法处理\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"no-var-keyword": {
"category": "functionality",
"description": "禁止使用 `var`",
"has-fixer": true
},
"no-void-expression": {
"category": "functionality",
"description": "禁止返回值为 `void` 类型",
"reason": "没必要限制,`void` 很常用\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"prefer-conditional-expression": {
"category": "functionality",
"description": "可以用三元表达式时,就不用 `if else`",
"reason": "没必要限制"
},
"prefer-object-spread": {
"category": "functionality",
"description": "使用 `{ ...foo, bar: 1 }` 代替 `Object.assign({}, foo, { bar: 1 })`",
"reason": "前者的类型检查更完善",
"has-fixer": true
},
"radix": { "category": "functionality", "description": "`parseInt` 必须传入第二个参数" },
"restrict-plus-operands": {
"category": "functionality",
"description": "使用加号时,两者必须同为数字或同为字符串",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"strict-boolean-expressions": {
"category": "functionality",
"description": "在分支条件判断中必须传入布尔类型的值",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"strict-type-predicates": {
"category": "functionality",
"description": "禁止出现永远为 `true` 或永远为 `false` 的条件判断(通过类型预测出一个表达式为 `true` 还是 `false`)",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"switch-default": {
"category": "functionality",
"description": "`switch` 语句必须有 `default`"
},
"triple-equals": {
"category": "functionality",
"description": "必须使用 `===` 或 `!==`,禁止使用 `==` 或 `!=`"
},
"typeof-compare": {
"category": "functionality",
"description": "`typeof` 表达式比较的对象必须是 `'undefined'`, `'object'`, `'boolean'`, `'number'`, `'string'`, `'function'` 或 `'symbol'`",
"reason": "TypeScirpt 2.2 之后,编译器已经只带了这个功能"
},
"use-default-type-parameter": {
"category": "functionality",
"description": "传入的类型与默认类型一致时,必须省略传入的类型",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"use-isnan": {
"category": "functionality",
"description": "必须使用 `isNaN(foo)` 而不是 `foo === NaN`"
},
"cyclomatic-complexity": {
"category": "maintainability",
"description": "禁止函数的循环复杂度超过 20,详见 https://en.wikipedia.org/wiki/Cyclomatic_complexity"
},
"deprecation": {
"category": "maintainability",
"description": "禁止使用废弃(被标识了 `@deprecated`)的 API",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"eofline": {
"category": "maintainability",
"description": "文件最后一行必须有一个空行",
"has-fixer": true,
"prettier": true
},
"indent": {
"category": "maintainability",
"description": "一个缩进必须用四个空格替代",
"has-fixer": true,
"prettier": true
},
"linebreak-style": {
"category": "maintainability",
"description": "限制换行符为 LF 或 CRLF",
"reason": "没必要限制",
"has-fixer": true,
"prettier": true
},
"max-classes-per-file": {
"category": "maintainability",
"description": "限制每个文件的类的数量",
"reason": "没必要限制"
},
"max-file-line-count": {
"category": "maintainability",
"description": "限制每个文件的行数",
"reason": "没必要限制"
},
"max-line-length": {
"category": "maintainability",
"description": "限制每行字符数",
"reason": "没必要限制",
"prettier": true
},
"no-default-export": {
"category": "maintainability",
"description": "禁止使用 `default export`",
"reason": "没必要限制"
},
"no-duplicate-imports": {
"category": "maintainability",
"description": "禁止出现重复的 `import`"
},
"no-mergeable-namespace": {
"category": "maintainability",
"description": "禁止一个文件中出现多个相同的 `namespace`",
"ts-only": true
},
"no-require-imports": {
"category": "maintainability",
"description": "禁止使用 `require`",
"reason": "有时需要动态引入,还是需要用 `require`"
},
"object-literal-sort-keys": {
"category": "maintainability",
"description": "对象字面量必须按 `key` 排序",
"reason": "太严格了"
},
"prefer-const": {
"category": "maintainability",
"description": "申明后不再被修改的变量必须使用 `const` 来申明",
"reason": "没必要强制要求",
"has-fixer": true
},
"prefer-readonly": {
"category": "maintainability",
"description": "如果私有变量只在构造函数中被赋值,则必须使用 `readonly` 修饰符",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"trailing-comma": {
"category": "maintainability",
"description": "限制对象、数组、解构赋值等的最后一项末尾是否需要逗号",
"has-fixer": true,
"prettier": true
},
"align": {
"category": "style",
"description": "变量定义需要竖向对其",
"reason": "没必要限制",
"has-fixer": true,
"prettier": true
},
"array-type": {
"category": "style",
"description": "限制必须使用 `T[]` 或 `Array<T>` 之中的一种来定义数组的类型",
"reason": "没必要限制",
"ts-only": true,
"has-fixer": true
},
"arrow-parens": {
"category": "style",
"description": "箭头函数的参数必须有小括号",
"has-fixer": true,
"prettier": true
},
"arrow-return-shorthand": {
"category": "style",
"description": "箭头函数的函数体只有 `return` 语句的时候,必须简写",
"has-fixer": true
},
"binary-expression-operand-order": {
"category": "style",
"description": "数字字面量必须在加号的右边,即禁止 `1 + x`",
"reason": "没必要限制"
},
"callable-types": {
"category": "style",
"description": "可以简写为函数类型的接口或字面类似,必须简写",
"ts-only": true,
"has-fixer": true
},
"class-name": { "category": "style", "description": "类名与接口名必须为驼峰式" },
"comment-format": {
"category": "style",
"description": "限制单行注释的规则",
"has-fixer": true
},
"completed-docs": {
"category": "style",
"description": "类、函数等必须写注释",
"reason": "太严格了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"encoding": { "category": "style", "description": "文件类型必须是 utf-8" },
"file-header": {
"category": "style",
"description": "文件的开头必须有指定的字符串",
"reason": "太严格了",
"has-fixer": true
},
"file-name-casing": {
"category": "style",
"description": "约束文件命名规范",
"reason": "没必要约束"
},
"import-spacing": {
"category": "style",
"description": "`import` 语句中,关键字之间的间距必须是一个空格",
"prettier": true
},
"interface-name": {
"category": "style",
"description": "接口名称必须已 `I` 开头",
"reason": "没必要限制",
"ts-only": true
},
"interface-over-type-literal": {
"category": "style",
"description": "优先使用接口而不是字面类型",
"reason": "接口可以 `implement` `extend` 和 `merge`",
"ts-only": true,
"has-fixer": true
},
"jsdoc-format": { "category": "style", "description": "注释必须符合 JSDoc 规范" },
"match-default-export-name": {
"category": "style",
"description": "`import` 的名称必须和 `export default` 的名称一致",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"requires-type-info": true
},
"new-parens": {
"category": "style",
"description": "`new` 后面只必须有一个空格",
"prettier": true
},
"newline-before-return": {
"category": "style",
"description": "`return` 语句前必须有空行",
"reason": "没必要有空行"
},
"newline-per-chained-call": {
"category": "style",
"description": "链式调用时,每次调用都必须占用一行",
"reason": "没必要限制",
"prettier": true
},
"no-angle-bracket-type-assertion": {
"category": "style",
"description": "类型断言必须使用 `as Type`,禁止使用 `<Type>`",
"reason": "`<Type>` 容易被理解为 jsx",
"ts-only": true,
"has-fixer": true
},
"no-boolean-literal-compare": {
"category": "style",
"description": "禁止变量与 `true` 或 `false` 比较",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"has-fixer": true,
"requires-type-info": true
},
"no-consecutive-blank-lines": {
"category": "style",
"description": "禁止连续超过三行空行",
"has-fixer": true,
"prettier": true
},
"no-irregular-whitespace": {
"category": "style",
"description": "禁止使用特殊空白符(比如全角空格)",
"has-fixer": true,
"prettier": true
},
"no-parameter-properties": {
"category": "style",
"description": "禁止给类的构造函数的参数添加修饰符",
"ts-only": true
},
"no-redundant-jsdoc": {
"category": "style",
"description": "禁止 JSDoc 中的冗余类型声明,因为 TypeScirpt 已经包含了大部分功能",
"ts-only": true
},
"no-reference-import": {
"category": "style",
"description": "如果已经引入过库,则禁止使用三斜杠引入类型定义文件",
"ts-only": true
},
"no-trailing-whitespace": {
"category": "style",
"description": "禁止行尾有空格",
"has-fixer": true,
"prettier": true
},
"no-unnecessary-callback-wrapper": {
"category": "style",
"description": "禁止没必要的函数调用,如 `x => f(x)` 应该简写为 `f`",
"reason": "没必要限制"
},
"no-unnecessary-initializer": {
"category": "style",
"description": "禁止变量定义时赋值为 `undefined`",
"has-fixer": true
},
"no-unnecessary-qualifier": {
"category": "style",
"description": "在命名空间中,可以直接使用内部变量,不需要添加命名空间前缀",
"reason": "已经禁止使用命名空间了\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"ts-only": true,
"has-fixer": true,
"requires-type-info": true
},
"number-literal-format": {
"category": "style",
"description": "小数必须以 `0.` 开头,禁止以 `.` 开头,并且不能以 `0` 结尾",
"prettier": true
},
"object-literal-key-quotes": {
"category": "style",
"description": "对象的 key 必须用引号包起来",
"reason": "没必要限制",
"has-fixer": true,
"prettier": true
},
"object-literal-shorthand": {
"category": "style",
"description": "必须使用 `a = {b}` 而不是 `a = {b: b}`",
"has-fixer": true
},
"one-line": {
"category": "style",
"description": "`if` 后的 `{` 禁止换行",
"has-fixer": true,
"prettier": true
},
"one-variable-per-declaration": {
"category": "style",
"description": "变量申明必须每行一个,`for` 循环的初始条件中除外"
},
"ordered-imports": {
"category": "style",
"description": "`import` 必须排序",
"has-fixer": true
},
"prefer-function-over-method": {
"category": "style",
"description": "类中没有使用 `this` 的方法应该提取成类外的函数",
"reason": "太严格了"
},
"prefer-method-signature": {
"category": "style",
"description": "必须使用 `foo(): void` 而不是 `foo: () => void`",
"reason": "没必要限制",
"has-fixer": true
},
"prefer-switch": {
"category": "style",
"description": "当 `if` 中只有 `===` 时,必须使用 `switch` 替换 `if`",
"reason": "没必要限制"
},
"prefer-template": {
"category": "style",
"description": "必须使用模版字符串而不是字符串连接",
"reason": "字符串连接很常用"
},
"prefer-while": {
"category": "style",
"description": "当没有初始值的时候,必须使用 `while` 而不是 `for`",
"reason": "没必要限制",
"has-fixer": true
},
"quotemark": {
"category": "style",
"description": "必须使用单引号,jsx 中必须使用双引号",
"has-fixer": true,
"prettier": true
},
"return-undefined": {
"category": "style",
"description": "使用 `return;` 而不是 `return undefined;`",
"reason": "没必要限制\nRequires Type Info 的规则,无法在编辑器中显示错误,不方便修复",
"requires-type-info": true
},
"semicolon": {
"category": "style",
"description": "行尾必须有分号",
"has-fixer": true,
"prettier": true
},
"space-before-function-paren": {
"category": "style",
"description": "函数名前必须有空格",
"has-fixer": true,
"prettier": true
},
"space-within-parens": {
"category": "style",
"description": "括号内首尾禁止有空格",
"has-fixer": true,
"prettier": true
},
"switch-final-break": {
"category": "style",
"description": "`switch` 的最后一项禁止有 `break`",
"reason": "没必要限制",
"has-fixer": true
},
"type-literal-delimiter": {
"category": "style",
"description": "字面类型的每个成员都必须有分号",
"ts-only": true
},
"variable-name": {
"category": "style",
"description": "限制变量命名规则",
"reason": "没必要限制"
},
"whitespace": {
"category": "style",
"description": "限制空格的位置",
"has-fixer": true,
"prettier": true
}
}