{
    "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
    }
}
