{
  "@typescript-eslint/adjacent-overload-signatures": {
    "name": "@typescript-eslint/adjacent-overload-signatures",
    "value": "error",
    "description": "重载的函数必须写在一起",
    "reason": "增加可读性",
    "badExample": "<span class=\"token keyword\">declare</span> <span class=\"token keyword\">namespace</span> NSFoo1 <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <mark class=\"eslint-error\" data-tip=\"All &amp;apos;foo&amp;apos; signatures should be adjacent.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/adjacent-overload-signatures)</span>\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">type</span> TypeFoo1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <mark class=\"eslint-error\" data-tip=\"All &amp;apos;foo&amp;apos; signatures should be adjacent.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/adjacent-overload-signatures)</span>\"><span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">IFoo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <mark class=\"eslint-error\" data-tip=\"All &amp;apos;foo&amp;apos; signatures should be adjacent.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/adjacent-overload-signatures)</span>\"><span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">declare</span> <span class=\"token keyword\">namespace</span> NSFoo2 <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">type</span> TypeFoo2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">IFoo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span>sn<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/array-type": {
    "name": "@typescript-eslint/array-type",
    "value": "off",
    "description": "限制数组类型必须使用 Array<T> 或 T[]",
    "reason": "允许灵活运用两者",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/await-thenable": {
    "name": "@typescript-eslint/await-thenable",
    "value": "off",
    "description": "禁止对没有 then 方法的对象使用 await",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/ban-ts-comment": {
    "name": "@typescript-eslint/ban-ts-comment",
    "value": "off",
    "description": "禁止使用 // @ts-ignore // @ts-nocheck // @ts-check",
    "reason": "这种注释本身就是对特殊代码的说明",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/ban-tslint-comment": {
    "name": "@typescript-eslint/ban-tslint-comment",
    "value": "off",
    "description": "禁止使用类似 tslint:disable-next-line 这样的注释",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/ban-types": {
    "name": "@typescript-eslint/ban-types",
    "value": "off",
    "description": "禁止使用指定的类型",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/class-literal-property-style": {
    "name": "@typescript-eslint/class-literal-property-style",
    "value": ["error", "fields"],
    "description": "类的只读属性若是一个字面量，则必须使用只读属性而不是 getter",
    "reason": "",
    "badExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">get</span> <span class=\"token function\"><mark class=\"eslint-error\" data-tip=\"Literals should be exposed using readonly fields.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/class-literal-property-style)</span>\">bar</mark></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">readonly</span> bar <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/consistent-indexed-object-style": {
    "name": "@typescript-eslint/consistent-indexed-object-style",
    "value": "off",
    "description": "必须使用内置的 Record<K, T> 来描述仅包含可索引成员的接口",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/consistent-type-assertions": {
    "name": "@typescript-eslint/consistent-type-assertions",
    "value": ["error", { "assertionStyle": "as", "objectLiteralTypeAssertions": "never" }],
    "description": "类型断言必须使用 as Type，禁止使用 <Type>，禁止对对象字面量进行类型断言（断言成 any 是允许的）",
    "reason": "<Type> 容易被理解为 jsx",
    "badExample": "<span class=\"token keyword\">let</span> bar1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> foo1 <span class=\"token operator\">=</span> <mark class=\"eslint-error\" data-tip=\"Use &amp;apos;as string&amp;apos; instead of &amp;apos;&amp;lt;string&amp;gt;&amp;apos;.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/consistent-type-assertions)</span>\"><span class=\"token operator\">&lt;</span><span class=\"token builtin\">string</span><span class=\"token operator\">></span>bar1</mark><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> baz1 <span class=\"token operator\">=</span> <mark class=\"eslint-error\" data-tip=\"Always prefer const x: T = { ... }.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/consistent-type-assertions)</span>\"><span class=\"token punctuation\">{</span>\n  bar<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">as</span> object</mark><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">let</span> bar2<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> foo2 <span class=\"token operator\">=</span> bar2 <span class=\"token keyword\">as</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> baz2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  bar<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">as</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/consistent-type-definitions": {
    "name": "@typescript-eslint/consistent-type-definitions",
    "value": ["error", "interface"],
    "description": "优先使用 interface 而不是 type",
    "reason": "interface 可以 implement, extend 和 merge",
    "badExample": "<span class=\"token keyword\">type</span> <mark class=\"eslint-error\" data-tip=\"Use an `interface` instead of a `type`.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/consistent-type-definitions)</span>\">Foo1</mark> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  foo<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  foo<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/consistent-type-imports": {
    "name": "@typescript-eslint/consistent-type-imports",
    "value": "off",
    "description": "必须使用 import type 导入类型",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/default-param-last": {
    "name": "@typescript-eslint/default-param-last",
    "value": "off",
    "description": "有默认值或可选的参数必须放到最后",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "default-param-last",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/dot-notation": {
    "name": "@typescript-eslint/dot-notation",
    "value": "off",
    "description": "禁止使用 foo['bar']，必须写成 foo.bar",
    "reason": "当需要写一系列属性的时候，可以更统一",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "dot-notation",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/explicit-function-return-type": {
    "name": "@typescript-eslint/explicit-function-return-type",
    "value": "off",
    "description": "函数返回值必须与声明的类型一致",
    "reason": "编译阶段检查就足够了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/explicit-member-accessibility": {
    "name": "@typescript-eslint/explicit-member-accessibility",
    "value": "off",
    "description": "必须设置类的成员的可访问性",
    "reason": "将不需要公开的成员设为私有的，可以增强代码的可理解性，对文档输出也很友好",
    "badExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on class property foo.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token keyword\">static</span> foo <span class=\"token operator\">=</span> <span class=\"token string\">'foo'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on method definition getFoo.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token keyword\">static</span> <span class=\"token function\">getFoo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Foo2<span class=\"token punctuation\">.</span>foo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on method definition constructor.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on class property bar.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\">bar <span class=\"token operator\">=</span> <span class=\"token string\">'bar'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on method definition getBar.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token function\">getBar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on get property accessor baz.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token keyword\">get</span> <span class=\"token function\">baz</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">'baz'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Missing accessibility modifier on set property accessor baz.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/explicit-member-accessibility)</span>\"><span class=\"token keyword\">set</span> <span class=\"token function\">baz</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> foo <span class=\"token operator\">=</span> <span class=\"token string\">'foo'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Foo2<span class=\"token punctuation\">.</span>foo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">protected</span> bar <span class=\"token operator\">=</span> <span class=\"token string\">'bar'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token function\">getBar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">get</span> <span class=\"token function\">baz</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">'baz'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">set</span> <span class=\"token function\">baz</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/explicit-module-boundary-types": {
    "name": "@typescript-eslint/explicit-module-boundary-types",
    "value": "off",
    "description": "导出的函数或类中的 public 方法必须定义输入输出参数的类型",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/init-declarations": {
    "name": "@typescript-eslint/init-declarations",
    "value": "off",
    "description": "变量必须在定义的时候赋值",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "init-declarations",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/lines-between-class-members": {
    "name": "@typescript-eslint/lines-between-class-members",
    "value": "off",
    "description": "类的成员之间是否需要空行",
    "reason": "有时为了紧凑需要挨在一起，有时为了可读性需要空一行",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "lines-between-class-members",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/member-ordering": {
    "name": "@typescript-eslint/member-ordering",
    "value": [
      "error",
      {
        "default": [
          "public-static-field",
          "protected-static-field",
          "private-static-field",
          "static-field",
          "public-static-method",
          "protected-static-method",
          "private-static-method",
          "static-method",
          "public-instance-field",
          "protected-instance-field",
          "private-instance-field",
          "public-field",
          "protected-field",
          "private-field",
          "instance-field",
          "field",
          "constructor",
          "public-instance-method",
          "protected-instance-method",
          "private-instance-method",
          "public-method",
          "protected-method",
          "private-method",
          "instance-method",
          "method"
        ]
      }
    ],
    "description": "指定类成员的排序规则",
    "reason": "优先级：\n1. static > instance\n2. field > constructor > method\n3. public > protected > private",
    "badExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token function\">getBar3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>bar3<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <mark class=\"eslint-error\" data-tip=\"Member getBar2 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">protected</span> <span class=\"token function\">getBar2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member getBar1 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">public</span> <span class=\"token function\">getBar1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member constructor should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>Foo1<span class=\"token punctuation\">.</span><span class=\"token function\">getFoo3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getBar3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member bar3 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">private</span> bar3 <span class=\"token operator\">=</span> <span class=\"token string\">'bar3'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member bar2 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">protected</span> bar2 <span class=\"token operator\">=</span> <span class=\"token string\">'bar2'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member bar1 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">public</span> bar1 <span class=\"token operator\">=</span> <span class=\"token string\">'bar1'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member getFoo3 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Foo1<span class=\"token punctuation\">.</span>foo3<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member getFoo2 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">protected</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member getFoo1 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member foo3 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> foo3 <span class=\"token operator\">=</span> <span class=\"token string\">'foo3'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member foo2 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">protected</span> <span class=\"token keyword\">static</span> foo2 <span class=\"token operator\">=</span> <span class=\"token string\">'foo2'</span><span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Member foo1 should be declared before all private instance method definitions.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/member-ordering)</span>\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> foo1 <span class=\"token operator\">=</span> <span class=\"token string\">'foo1'</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> foo1 <span class=\"token operator\">=</span> <span class=\"token string\">'foo1'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">protected</span> <span class=\"token keyword\">static</span> foo2 <span class=\"token operator\">=</span> <span class=\"token string\">'foo2'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> foo3 <span class=\"token operator\">=</span> <span class=\"token string\">'foo3'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">protected</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token function\">getFoo3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Foo2<span class=\"token punctuation\">.</span>foo3<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> bar1 <span class=\"token operator\">=</span> <span class=\"token string\">'bar1'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">protected</span> bar2 <span class=\"token operator\">=</span> <span class=\"token string\">'bar2'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> bar3 <span class=\"token operator\">=</span> <span class=\"token string\">'bar3'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>Foo2<span class=\"token punctuation\">.</span><span class=\"token function\">getFoo3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getBar3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token function\">getBar1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">protected</span> <span class=\"token function\">getBar2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">private</span> <span class=\"token function\">getBar3</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>bar3<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/method-signature-style": {
    "name": "@typescript-eslint/method-signature-style",
    "value": "error",
    "description": "接口中的方法必须用属性的方式定义",
    "reason": "配置了 strictFunctionTypes 之后，用属性的方式定义方法可以获得更严格的检查",
    "badExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Shorthand method signature is forbidden. Use a function property instead.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/method-signature-style)</span>\"><span class=\"token function\">bar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function-variable function\">bar</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/naming-convention": {
    "name": "@typescript-eslint/naming-convention",
    "value": "off",
    "description": "限制各种变量或类型的命名规则",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-array-constructor": {
    "name": "@typescript-eslint/no-array-constructor",
    "value": "off",
    "description": "禁止使用 Array 构造函数",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "no-array-constructor",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-base-to-string": {
    "name": "@typescript-eslint/no-base-to-string",
    "value": "off",
    "description": "禁止滥用 toString 方法",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-confusing-non-null-assertion": {
    "name": "@typescript-eslint/no-confusing-non-null-assertion",
    "value": "off",
    "description": "禁止使用容易混淆的非空断言",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-dupe-class-members": {
    "name": "@typescript-eslint/no-dupe-class-members",
    "value": "off",
    "description": "禁止重复定义类的成员",
    "reason": "编译阶段就会报错了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-dupe-class-members",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-duplicate-imports": {
    "name": "@typescript-eslint/no-duplicate-imports",
    "value": "error",
    "description": "禁止重复导入模块",
    "reason": "",
    "badExample": "<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> readFile <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'fs'</span><span class=\"token punctuation\">;</span>\n<mark class=\"eslint-error\" data-tip=\"&amp;apos;fs&amp;apos; import is duplicated.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-duplicate-imports)</span>\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> writeFile <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'fs'</span><span class=\"token punctuation\">;</span></mark>",
    "goodExample": "<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> readFile<span class=\"token punctuation\">,</span> writeFile <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'fs'</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "no-duplicate-imports",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-dynamic-delete": {
    "name": "@typescript-eslint/no-dynamic-delete",
    "value": "off",
    "description": "禁止 delete 时传入的 key 是动态的",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-empty-function": {
    "name": "@typescript-eslint/no-empty-function",
    "value": "off",
    "description": "不允许有空函数",
    "reason": "有时需要将一个空函数设置为某个项的默认值",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-empty-function",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-empty-interface": {
    "name": "@typescript-eslint/no-empty-interface",
    "value": "error",
    "description": "禁止定义空的接口",
    "reason": "",
    "badExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\"><mark class=\"eslint-error\" data-tip=\"An empty interface is equivalent to `{}`.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-empty-interface)</span>\">Foo1</mark></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  foo<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-explicit-any": {
    "name": "@typescript-eslint/no-explicit-any",
    "value": "off",
    "description": "禁止使用 any",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-extra-non-null-assertion": {
    "name": "@typescript-eslint/no-extra-non-null-assertion",
    "value": "off",
    "description": "禁止多余的 non-null 断言",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-extraneous-class": {
    "name": "@typescript-eslint/no-extraneous-class",
    "value": "off",
    "description": "禁止定义没必要的类，比如只有静态方法的类",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-floating-promises": {
    "name": "@typescript-eslint/no-floating-promises",
    "value": "off",
    "description": "禁止调用 Promise 时没有处理异常情况",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-for-in-array": {
    "name": "@typescript-eslint/no-for-in-array",
    "value": "off",
    "description": "禁止对 array 使用 for in 循环",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-implicit-any-catch": {
    "name": "@typescript-eslint/no-implicit-any-catch",
    "value": "off",
    "description": "catch 的参数必须指定具体类型",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-implied-eval": {
    "name": "@typescript-eslint/no-implied-eval",
    "value": "off",
    "description": "禁止使用 eval",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-inferrable-types": {
    "name": "@typescript-eslint/no-inferrable-types",
    "value": "error",
    "description": "禁止给一个初始化时直接赋值为 number, string 的变量显式的声明类型",
    "reason": "可以简化代码",
    "badExample": "<span class=\"token keyword\">let</span> <mark class=\"eslint-error\" data-tip=\"Type number trivially inferred from a number literal, remove type annotation.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-inferrable-types)</span>\">foo1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span></mark><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> <mark class=\"eslint-error\" data-tip=\"Type string trivially inferred from a string literal, remove type annotation.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-inferrable-types)</span>\">bar1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token operator\">=</span> <span class=\"token string\">''</span></mark><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">const</span> foo2 <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> bar2 <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">;</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-invalid-this": {
    "name": "@typescript-eslint/no-invalid-this",
    "value": "off",
    "description": "禁止在类之外的地方使用 this",
    "reason": "只允许在 class 中使用 this",
    "badExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\"><mark class=\"eslint-error\" data-tip=\"Unexpected &amp;apos;this&amp;apos;.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-invalid-this)</span>\">this</mark></span><span class=\"token punctuation\">.</span>a <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo</span> <span class=\"token punctuation\">{</span>\n  a<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>a <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "no-invalid-this",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-invalid-void-type": {
    "name": "@typescript-eslint/no-invalid-void-type",
    "value": "error",
    "description": "禁止使用无意义的 void 类型",
    "reason": "void 只能用在函数的返回值中",
    "badExample": "<span class=\"token keyword\">type</span> Foo1 <span class=\"token operator\">=</span> <span class=\"token keyword\"><mark class=\"eslint-error\" data-tip=\"void is only valid as a return type or generic type variable<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-invalid-void-type)</span>\">void</mark></span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">type</span> <span class=\"token function-variable function\">Foo2</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-loop-func": {
    "name": "@typescript-eslint/no-loop-func",
    "value": "off",
    "description": "禁止在循环内的函数内部出现循环体条件语句中定义的变量",
    "reason": "使用 let 就已经解决了这个问题了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-loop-func",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-loss-of-precision": {
    "name": "@typescript-eslint/no-loss-of-precision",
    "value": "error",
    "description": "禁止使用超出 js 精度范围的数字",
    "reason": "",
    "badExample": "<span class=\"token keyword\">const</span> foo1 <span class=\"token operator\">=</span> <span class=\"token number\"><mark class=\"eslint-error\" data-tip=\"This number literal will lose precision at runtime.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-loss-of-precision)</span>\">5123000000000000000000000000001</mark></span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">const</span> foo2 <span class=\"token operator\">=</span> <span class=\"token number\">12345</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "no-loss-of-precision",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-magic-numbers": {
    "name": "@typescript-eslint/no-magic-numbers",
    "value": "off",
    "description": "禁止使用 magic numbers",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-magic-numbers",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-misused-new": {
    "name": "@typescript-eslint/no-misused-new",
    "value": "off",
    "description": "禁止在接口中定义 constructor，或在类中定义 new",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-misused-promises": {
    "name": "@typescript-eslint/no-misused-promises",
    "value": "off",
    "description": "避免错误的使用 Promise",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-namespace": {
    "name": "@typescript-eslint/no-namespace",
    "value": ["error", { "allowDeclarations": true, "allowDefinitionFiles": true }],
    "description": "禁止使用 namespace 来定义命名空间",
    "reason": "使用 es6 引入模块，才是更标准的方式。\n但是允许使用 declare namespace ... {} 来定义外部命名空间",
    "badExample": "<mark class=\"eslint-error\" data-tip=\"ES2015 module syntax is preferred over custom TypeScript modules and namespaces.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-namespace)</span>\"><span class=\"token keyword\">namespace</span> foo1 <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>",
    "goodExample": "<span class=\"token keyword\">declare</span> <span class=\"token keyword\">namespace</span> foo1 <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-non-null-asserted-optional-chain": {
    "name": "@typescript-eslint/no-non-null-asserted-optional-chain",
    "value": "error",
    "description": "禁止在 optional chaining 之后使用 non-null 断言（感叹号）",
    "reason": "optional chaining 后面的属性一定是非空的",
    "badExample": "<span class=\"token keyword\">let</span> foo1<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span> bar<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span> baz<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">|</span> undefined<span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><mark class=\"eslint-error\" data-tip=\"Optional chain expressions can return undefined by design - using a non-null assertion is unsafe and wrong.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-non-null-asserted-optional-chain)</span>\">foo1<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>bar<span class=\"token operator\">!</span></mark><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">let</span> foo2<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span> bar<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span> baz<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span> <span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span> <span class=\"token operator\">|</span> undefined<span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>foo2<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>bar<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-non-null-assertion": {
    "name": "@typescript-eslint/no-non-null-assertion",
    "value": "off",
    "description": "禁止使用 non-null 断言（感叹号）",
    "reason": "使用 non-null 断言时就已经清楚了风险",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-parameter-properties": {
    "name": "@typescript-eslint/no-parameter-properties",
    "value": "error",
    "description": "禁止给类的构造函数的参数添加修饰符",
    "reason": "强制所有属性都定义到类里面，比较统一",
    "badExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><mark class=\"eslint-error\" data-tip=\"Property name cannot be declared in the constructor.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-parameter-properties)</span>\"><span class=\"token keyword\">private</span> name<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span></mark></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-redeclare": {
    "name": "@typescript-eslint/no-redeclare",
    "value": "off",
    "description": "禁止重复定义变量",
    "reason": "禁用 var 之后，编译阶段就会报错了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-redeclare",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-require-imports": {
    "name": "@typescript-eslint/no-require-imports",
    "value": "error",
    "description": "禁止使用 require",
    "reason": "统一使用 import 来引入模块，特殊情况使用单行注释允许 require 引入",
    "badExample": "<span class=\"token keyword\">const</span> fs <span class=\"token operator\">=</span> <mark class=\"eslint-error\" data-tip=\"A `require()` style import is forbidden.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-require-imports)</span>\"><span class=\"token keyword\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fs'</span><span class=\"token punctuation\">)</span></mark><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">import</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">as</span> fs <span class=\"token keyword\">from</span> <span class=\"token string\">'fs'</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-shadow": {
    "name": "@typescript-eslint/no-shadow",
    "value": "off",
    "description": "禁止变量名与上层作用域内的已定义的变量重复",
    "reason": "很多时候函数的形参和传参是同名的",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-shadow",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-this-alias": {
    "name": "@typescript-eslint/no-this-alias",
    "value": ["error", { "allowDestructuring": true }],
    "description": "禁止将 this 赋值给其他变量，除非是解构赋值",
    "reason": "",
    "badExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <mark class=\"eslint-error\" data-tip=\"Unexpected aliasing of &amp;apos;this&amp;apos; to local variable.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-this-alias)</span>\">self</mark> <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    self<span class=\"token punctuation\">.</span><span class=\"token function\">doWork</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> bar <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">doWork</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-throw-literal": {
    "name": "@typescript-eslint/no-throw-literal",
    "value": "off",
    "description": "禁止 throw 字面量，必须 throw 一个 Error 对象",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-type-alias": {
    "name": "@typescript-eslint/no-type-alias",
    "value": "off",
    "description": "禁止使用类型别名",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-unnecessary-boolean-literal-compare": {
    "name": "@typescript-eslint/no-unnecessary-boolean-literal-compare",
    "value": "off",
    "description": "测试表达式中的布尔类型禁止与 true 或 false 直接比较",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unnecessary-condition": {
    "name": "@typescript-eslint/no-unnecessary-condition",
    "value": "off",
    "description": "条件表达式禁止是永远为真（或永远为假）的",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unnecessary-qualifier": {
    "name": "@typescript-eslint/no-unnecessary-qualifier",
    "value": "off",
    "description": "在命名空间中，可以直接使用内部变量，不需要添加命名空间前缀",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unnecessary-type-arguments": {
    "name": "@typescript-eslint/no-unnecessary-type-arguments",
    "value": "off",
    "description": "禁止范型的类型有默认值时，将范型设置为该默认值",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unnecessary-type-assertion": {
    "name": "@typescript-eslint/no-unnecessary-type-assertion",
    "value": "off",
    "description": "禁止无用的类型断言",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unsafe-assignment": {
    "name": "@typescript-eslint/no-unsafe-assignment",
    "value": "off",
    "description": "禁止将变量或属性的类型设置为 any",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unsafe-call": {
    "name": "@typescript-eslint/no-unsafe-call",
    "value": "off",
    "description": "禁止调用 any 类型的变量上的方法",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unsafe-member-access": {
    "name": "@typescript-eslint/no-unsafe-member-access",
    "value": "off",
    "description": "禁止获取 any 类型的变量中的属性",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unsafe-return": {
    "name": "@typescript-eslint/no-unsafe-return",
    "value": "off",
    "description": "禁止函数的返回值的类型是 any",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/no-unused-expressions": {
    "name": "@typescript-eslint/no-unused-expressions",
    "value": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true }],
    "description": "禁止无用的表达式",
    "reason": "",
    "badExample": "<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> foo1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> bar1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> baz1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\"><span class=\"token number\">1</span><span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\">foo1<span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\"><span class=\"token punctuation\">(</span><span class=\"token string\">'foo1'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\">foo1 <span class=\"token operator\">&amp;&amp;</span> bar1<span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\">foo1 <span class=\"token operator\">||</span> bar1<span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\">foo1 <span class=\"token operator\">?</span> bar1 <span class=\"token punctuation\">:</span> baz1<span class=\"token punctuation\">;</span></mark>\n<mark class=\"eslint-error\" data-tip=\"Expected an assignment or function call and instead saw an expression.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-unused-expressions)</span>\"><span class=\"token template-string\"><span class=\"token string\">`bar1`</span></span><span class=\"token punctuation\">;</span></mark>",
    "goodExample": "<span class=\"token string\">'use strict'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> foo2<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> bar2<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">declare</span> <span class=\"token keyword\">const</span> baz2<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\nfoo2 <span class=\"token operator\">&amp;&amp;</span> <span class=\"token function\">bar2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nfoo2 <span class=\"token operator\">||</span> <span class=\"token function\">bar2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nfoo2 <span class=\"token operator\">?</span> <span class=\"token function\">bar2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">:</span> <span class=\"token function\">baz2</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nfoo2<span class=\"token template-string\"><span class=\"token string\">`bar2`</span></span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "no-unused-expressions",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-unused-vars": {
    "name": "@typescript-eslint/no-unused-vars",
    "value": "off",
    "description": "已定义的变量必须使用",
    "reason": "编译阶段检查就足够了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-unused-vars",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-use-before-define": {
    "name": "@typescript-eslint/no-use-before-define",
    "value": "off",
    "description": "禁止在定义变量之前就使用它",
    "reason": "编译阶段检查就足够了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "no-use-before-define",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-useless-constructor": {
    "name": "@typescript-eslint/no-useless-constructor",
    "value": "error",
    "description": "禁止出现没必要的 constructor",
    "reason": "",
    "badExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Useless constructor.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-useless-constructor)</span>\"><span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Bar1</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Useless constructor.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/no-useless-constructor)</span>\"><span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">class</span> <span class=\"token class-name\">Foo2</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">doSomething</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">doSomething</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Bar2</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">doSomething</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">doSomething</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "no-useless-constructor",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/no-var-requires": {
    "name": "@typescript-eslint/no-var-requires",
    "value": "off",
    "description": "禁止使用 require 来引入模块",
    "reason": "no-require-imports 规则已经约束了 require",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-as-const": {
    "name": "@typescript-eslint/prefer-as-const",
    "value": "off",
    "description": "使用 as const 替代 as 'bar'",
    "reason": "as const 是新语法，不是很常见",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-enum-initializers": {
    "name": "@typescript-eslint/prefer-enum-initializers",
    "value": "off",
    "description": "枚举值必须初始化",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-for-of": {
    "name": "@typescript-eslint/prefer-for-of",
    "value": "error",
    "description": "使用 for 循环遍历数组时，如果索引仅用于获取成员，则必须使用 for of 循环替代 for 循环",
    "reason": "for of 循环更加易读",
    "badExample": "<span class=\"token keyword\">const</span> arr1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<mark class=\"eslint-error\" data-tip=\"Expected a `for-of` loop instead of a `for` loop with this simple iteration.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/prefer-for-of)</span>\"><span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> arr1<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></mark>",
    "goodExample": "<span class=\"token keyword\">const</span> arr2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">const</span> x <span class=\"token keyword\">of</span> arr2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> arr2<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// i is used to write to arr, so for-of could not be used.</span>\n  arr2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> arr2<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// i is used independent of arr, so for-of could not be used.</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">,</span> arr2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-function-type": {
    "name": "@typescript-eslint/prefer-function-type",
    "value": "error",
    "description": "使用函数类型别名替代包含函数调用声明的接口",
    "reason": "",
    "badExample": "<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Foo1</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Interface only has a call signature, you should use a function type instead.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/prefer-function-type)</span>\"><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">type</span> <span class=\"token function-variable function\">Foo2</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-includes": {
    "name": "@typescript-eslint/prefer-includes",
    "value": "off",
    "description": "使用 includes 而不是 indexOf",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-literal-enum-member": {
    "name": "@typescript-eslint/prefer-literal-enum-member",
    "value": "off",
    "description": "枚举类型的值必须是字面量，禁止是计算值",
    "reason": "编译阶段检查就足够了",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-namespace-keyword": {
    "name": "@typescript-eslint/prefer-namespace-keyword",
    "value": "error",
    "description": "禁止使用 module 来定义命名空间",
    "reason": "module 已成为 js 的关键字",
    "badExample": "<mark class=\"eslint-error\" data-tip=\"Use &amp;apos;namespace&amp;apos; instead of &amp;apos;module&amp;apos; to declare custom TypeScript modules.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/prefer-namespace-keyword)</span>\"><span class=\"token keyword\">module</span> Foo1 <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></mark>",
    "goodExample": "<span class=\"token keyword\">namespace</span> Foo2 <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-nullish-coalescing": {
    "name": "@typescript-eslint/prefer-nullish-coalescing",
    "value": "off",
    "description": "使用 ?? 替代 ||",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-optional-chain": {
    "name": "@typescript-eslint/prefer-optional-chain",
    "value": "error",
    "description": "使用 optional chaining 替代 &&",
    "reason": "",
    "badExample": "<span class=\"token keyword\">let</span> foo1<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><mark class=\"eslint-error\" data-tip=\"Prefer using an optional chain expression instead, as it&amp;apos;s more concise and easier to read.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/prefer-optional-chain)</span>\">foo1 <span class=\"token operator\">&amp;&amp;</span> foo1<span class=\"token punctuation\">.</span>a <span class=\"token operator\">&amp;&amp;</span> foo1<span class=\"token punctuation\">.</span>a<span class=\"token punctuation\">.</span>b <span class=\"token operator\">&amp;&amp;</span> foo1<span class=\"token punctuation\">.</span>a<span class=\"token punctuation\">.</span>b<span class=\"token punctuation\">.</span>c</mark><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">let</span> foo2<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>foo2<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>a<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>b<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/prefer-readonly": {
    "name": "@typescript-eslint/prefer-readonly",
    "value": "off",
    "description": "私有变量如果没有在构造函数外被赋值，则必须设为 readonly",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-readonly-parameter-types": {
    "name": "@typescript-eslint/prefer-readonly-parameter-types",
    "value": "off",
    "description": "函数的参数必须设置为 readonly",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-reduce-type-parameter": {
    "name": "@typescript-eslint/prefer-reduce-type-parameter",
    "value": "off",
    "description": "使用 reduce 方法时，必须传入范型，而不是对第二个参数使用 as",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-regexp-exec": {
    "name": "@typescript-eslint/prefer-regexp-exec",
    "value": "off",
    "description": "使用 RegExp#exec 而不是 String#match",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-string-starts-ends-with": {
    "name": "@typescript-eslint/prefer-string-starts-ends-with",
    "value": "off",
    "description": "使用 String#startsWith 而不是其他方式",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/prefer-ts-expect-error": {
    "name": "@typescript-eslint/prefer-ts-expect-error",
    "value": "off",
    "description": "当需要忽略下一行的 ts 错误时，必须使用 @ts-expect-error 而不是 @ts-ignore",
    "reason": "使用 @ts-expect-error 可以避免对不会报错的代码设置了 @ts-ignore",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/promise-function-async": {
    "name": "@typescript-eslint/promise-function-async",
    "value": "off",
    "description": "async 函数的返回值必须是 Promise",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/require-array-sort-compare": {
    "name": "@typescript-eslint/require-array-sort-compare",
    "value": "off",
    "description": "使用 sort 时必须传入比较函数",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/require-await": {
    "name": "@typescript-eslint/require-await",
    "value": "off",
    "description": "async 函数中必须存在 await 语句",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "require-await",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/restrict-plus-operands": {
    "name": "@typescript-eslint/restrict-plus-operands",
    "value": "off",
    "description": "使用加号时，两者必须同为数字或同为字符串",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/restrict-template-expressions": {
    "name": "@typescript-eslint/restrict-template-expressions",
    "value": "off",
    "description": "模版字符串中的变量类型必须是字符串",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/return-await": {
    "name": "@typescript-eslint/return-await",
    "value": "off",
    "description": "禁止在 return 语句里使用 await",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": true,
    "extendsBaseRule": "no-return-await",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/strict-boolean-expressions": {
    "name": "@typescript-eslint/strict-boolean-expressions",
    "value": "off",
    "description": "条件判断必须传入布尔值",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/switch-exhaustiveness-check": {
    "name": "@typescript-eslint/switch-exhaustiveness-check",
    "value": "off",
    "description": "使用联合类型作为 switch 的对象时，必须包含每一个类型的 case",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/triple-slash-reference": {
    "name": "@typescript-eslint/triple-slash-reference",
    "value": ["error", { "path": "never", "types": "always", "lib": "always" }],
    "description": "禁止使用三斜杠导入文件",
    "reason": "三斜杠是已废弃的语法，但在类型声明文件中还是可以使用的",
    "badExample": "<span class=\"token comment\"><mark class=\"eslint-error\" data-tip=\"Do not use a triple slash reference for ./Animal, use `import` style instead.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/triple-slash-reference)</span>\">/// &lt;reference path=\"./Animal\"></mark></span>",
    "goodExample": "<span class=\"token keyword\">import</span> Animal <span class=\"token keyword\">from</span> <span class=\"token string\">'./Animal'</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/typedef": {
    "name": "@typescript-eslint/typedef",
    "value": [
      "error",
      {
        "arrayDestructuring": false,
        "arrowParameter": false,
        "memberVariableDeclaration": false,
        "objectDestructuring": false,
        "parameter": false,
        "propertyDeclaration": true,
        "variableDeclaration": false
      }
    ],
    "description": "interface 和 type 定义时必须声明成员的类型",
    "reason": "",
    "badExample": "<span class=\"token keyword\">type</span> Foo1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <mark class=\"eslint-error\" data-tip=\"Expected bar to have a type annotation.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/typedef)</span>\">bar<span class=\"token punctuation\">;</span></mark>\n  <mark class=\"eslint-error\" data-tip=\"Expected baz to have a type annotation.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/typedef)</span>\">baz<span class=\"token punctuation\">;</span></mark>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>",
    "goodExample": "<span class=\"token keyword\">type</span> Foo2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  bar<span class=\"token punctuation\">:</span> <span class=\"token builtin\">boolean</span><span class=\"token punctuation\">;</span>\n  baz<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  },
  "@typescript-eslint/unbound-method": {
    "name": "@typescript-eslint/unbound-method",
    "value": "off",
    "description": "方法调用时需要绑定到正确的 this 上",
    "reason": "",
    "badExample": "",
    "goodExample": "",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": true
  },
  "@typescript-eslint/unified-signatures": {
    "name": "@typescript-eslint/unified-signatures",
    "value": "error",
    "description": "函数重载时，若能通过联合类型将两个函数的类型声明合为一个，则使用联合类型而不是两个函数声明",
    "reason": "",
    "badExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">foo1</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">foo1</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><mark class=\"eslint-error\" data-tip=\"These overloads can be combined into one signature taking `number | string`.<br/><span class='eslint-error-rule-id'>eslint(@typescript-eslint/unified-signatures)</span>\">x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">string</span></mark></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">foo1</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> x<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "goodExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">foo2</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">|</span> <span class=\"token builtin\">string</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">void</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">foo2</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token builtin\">any</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> x<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>",
    "fixable": false,
    "extendsBaseRule": "",
    "requiresTypeChecking": false
  }
}
