{
"adjacent-overload-signatures": {
"good": "// good foo 函数重载写在一起了\ndeclare namespace NSFoo2 {\n export function foo(s: string): void;\n export function foo(n: number): void;\n export function foo(sn: string | number): void;\n export function bar(): void;\n}\n\n// good foo 函数重载写在一起了\ntype TypeFoo2 = {\n foo(s: string): void;\n foo(n: number): void;\n foo(sn: string | number): void;\n bar(): void;\n};\n\n// good foo 函数重载写在一起了\ninterface IFoo2 {\n foo(s: string): void;\n foo(n: number): void;\n foo(sn: string | number): void;\n bar(): void;\n}\n",
"bad": "// bad foo 函数重载没有写在一起\ndeclare namespace NSFoo1 {\n export function foo(s: string): void;\n export function foo(n: number): void;\n export function bar(): void;\n export function foo(sn: string | number): void;\n}\n\n// bad foo 函数重载没有写在一起\ntype TypeFoo1 = {\n foo(s: string): void;\n foo(n: number): void;\n bar(): void;\n foo(sn: string | number): void;\n};\n\n// bad foo 函数重载没有写在一起\ninterface IFoo1 {\n foo(s: string): void;\n foo(n: number): void;\n bar(): void;\n foo(sn: string | number): void;\n}\n"
},
"member-access": {
"good": "// good 每个类成员都设置了可访问性\nclass Foo2 {\n private static foo = 'foo';\n public static getFoo() {\n return Foo2.foo;\n }\n public constructor() {}\n protected bar = 'bar';\n public getBar() {}\n public get baz() {\n return 'baz';\n }\n public set baz(value) {\n console.log(value);\n }\n}\n",
"bad": "// bad 没有设置类成员的可访问性\nclass Foo1 {\n static foo = 'foo';\n static getFoo() {\n return Foo1.foo;\n }\n constructor() {}\n bar = 'bar';\n getBar() {}\n get baz() {\n return 'baz';\n }\n set baz(value) {\n console.log(value);\n }\n}\n"
},
"member-ordering": {
"good": "// good 类成员排序正确\nclass Foo1 {\n public static foo1 = 'foo1';\n protected static foo2 = 'foo2';\n private static foo3 = 'foo3';\n public static getFoo1() {}\n protected static getFoo2() {}\n private static getFoo3() {\n return Foo1.foo3;\n }\n public bar1 = 'bar1';\n protected bar2 = 'bar2';\n private bar3 = 'bar3';\n public constructor() {\n console.log(Foo1.getFoo3());\n console.log(this.getBar3());\n }\n public getBar1() {}\n protected getBar2() {}\n private getBar3() {\n return this.bar3;\n }\n}\n",
"bad": "// bad 类成员没有正确的排序\nclass Foo2 {\n private getBar3() {\n return this.bar3;\n }\n protected getBar2() {}\n public getBar1() {}\n public constructor() {\n console.log(Foo1.getFoo3());\n console.log(this.getBar3());\n }\n private bar3 = 'bar3';\n protected bar2 = 'bar2';\n public bar1 = 'bar1';\n private static getFoo3() {\n return Foo1.foo3;\n }\n protected static getFoo2() {}\n public static getFoo1() {}\n private static foo3 = 'foo3';\n protected static foo2 = 'foo2';\n public static foo1 = 'foo1';\n}\n"
},
"no-empty-interface": {
"good": "// good 接口内容不为空\ninterface Foo1 {\n foo: string;\n}\n",
"bad": "// bad 接口内容为空\ninterface Foo2 {}\n"
},
"no-import-side-effect": {
"good": "// good 可以导入了有副作用(立即执行)的 css, less, sass, scss 模块\nimport './test.css';\nimport './test.less';\nimport './test.sass';\nimport './test.scss';\n\n// good 导入了模块之后再使用它\nimport * as tslint from 'tslint';\n\nconsole.log(tslint.Linter);\n",
"bad": "// bad 导入了有副作用(立即执行)的 js 模块\nimport 'tslint';\n"
},
"no-inferrable-types": {
"good": "// good 可以推论出的类型不用手动指定类型\nlet foo2 = 1;\nlet bar2 = '';\nlet baz2 = true;\n",
"bad": "// bad 给变量指定了没必要的类型声明\nlet foo1: number = 1;\nlet bar1: string = '';\nlet baz1: boolean = true;\n"
},
"no-internal-module": {
"good": "// good 使用 namespace 来定义命名空间\nnamespace Foo {\n\n}\n",
"bad": "// bad 使用 module 定义了命名空间\n// @TODO 可以去掉 prettierignore 中的这个文件 https://github.com/prettier/tslint-config-prettier/issues/234\nmodule Foo {\n\n}\n"
},
"no-magic-numbers": {
"good": "const NOT_FOUND = 404;\nconsole.error(NOT_FOUND, 'Error message');\n\nconsole.log(Date.now() / 1000);\n",
"bad": "console.error(404, 'Error message');\n"
},
"no-namespace": {
"good": "import { foo } from './Foo';\n\nfoo();\n\ndeclare namespace Bar {\n export function bar(): void;\n}\n\nBar.bar();\n",
"bad": "namespace Foo {\n export function foo() {\n console.log('foo');\n }\n}\n\nFoo.foo();\n"
},
"no-non-null-assertion": {
"good": "interface Bar2 {\n baz: string;\n}\n\nfunction foo2(bar: Bar2 | null) {\n if (bar === null) {\n return '';\n }\n return bar.baz;\n}\n",
"bad": "interface Bar1 {\n baz: string;\n}\n\nfunction foo1(bar: Bar1 | null) {\n return bar!.baz;\n}\n"
},
"no-parameter-reassignment": {
"good": "function foo1(_bar: string) {\n const bar = _bar || '';\n return bar;\n}\n",
"bad": "function foo2(bar: string) {\n bar = bar || '';\n return bar;\n}\n"
},
"no-reference": {
"good": "/// <reference types=\"node\" />\n\nimport './foo';\n",
"bad": "/// <reference path=\"foo.ts\" />\n"
},
"no-var-requires": {
"good": "import { foo } from './foo';\n\nfoo();\n",
"bad": "const { foo } = require('./foo');\n\nfoo();\n"
},
"only-arrow-functions": {
"good": "let foo2 = () => {};\n\nfunction bar2() {}\n\nlet baz2 = function baz2() {};\n",
"bad": "let foo1 = function() {};\n"
},
"prefer-for-of": {
"good": "let foo2 = [1, 2, 3];\n\nfor (let i of foo2) {\n console.log(foo2[i]);\n}\n\nfor (let i = 0; i < foo1.length; i++) {\n console.log(foo1[i]);\n console.log(i);\n}\n",
"bad": "let foo1 = [1, 2, 3];\n\nfor (let i = 0; i < foo1.length; i++) {\n console.log(foo1[i]);\n}\n"
},
"typedef-whitespace": {
"good": "let foo2: string;\n",
"bad": "let foo1:string;\nlet bar1 :string;\nlet baz1: string;\n"
},
"unified-signatures": {
"good": "function foo2(x: number | string): void;\nfunction foo2(x: any): any {\n return x;\n}\n",
"bad": "function foo1(x: number): void;\nfunction foo1(x: string): void;\nfunction foo1(x: any): any {\n return x;\n}\n"
},
"ban-comma-operator": {
"good": "let bar2 = 5;\nlet baz2 = 6;\nlet foo2 = baz2;\n",
"bad": "let foo1 = (bar1 = 5, baz1 = 6);\n"
},
"curly": { "good": "", "bad": "" },
"forin": { "good": "", "bad": "" },
"no-arg": { "good": "", "bad": "" },
"no-conditional-assignment": { "good": "", "bad": "" },
"no-construct": { "good": "", "bad": "" },
"no-duplicate-super": { "good": "", "bad": "" },
"no-duplicate-switch-case": { "good": "", "bad": "" },
"no-duplicate-variable": { "good": "", "bad": "" },
"no-empty": { "good": "", "bad": "" },
"no-eval": { "good": "", "bad": "" },
"no-for-in-array": { "good": "", "bad": "" },
"no-implicit-dependencies": { "good": "", "bad": "" },
"no-invalid-template-strings": { "good": "", "bad": "" },
"no-invalid-this": { "good": "", "bad": "" },
"no-object-literal-type-assertion": { "good": "", "bad": "" },
"no-sparse-arrays": { "good": "", "bad": "" },
"no-string-literal": { "good": "", "bad": "" },
"no-string-throw": { "good": "", "bad": "" },
"no-switch-case-fall-through": { "good": "", "bad": "" },
"no-this-assignment": { "good": "", "bad": "" },
"no-unbound-method": { "good": "", "bad": "" },
"no-unsafe-finally": { "good": "", "bad": "" },
"no-unused-expression": { "good": "", "bad": "" },
"no-use-before-declare": { "good": "", "bad": "" },
"no-var-keyword": { "good": "", "bad": "" },
"prefer-object-spread": { "good": "", "bad": "" },
"radix": { "good": "", "bad": "" },
"strict-type-predicates": { "good": "", "bad": "" },
"triple-equals": { "good": "", "bad": "" },
"use-isnan": { "good": "", "bad": "" },
"cyclomatic-complexity": { "good": "", "bad": "" },
"deprecation": { "good": "", "bad": "" },
"eofline": { "good": "", "bad": "" },
"indent": { "good": "", "bad": "" },
"linebreak-style": { "good": "", "bad": "" },
"no-duplicate-imports": { "good": "", "bad": "" },
"no-mergeable-namespace": { "good": "", "bad": "" },
"trailing-comma": { "good": "", "bad": "" },
"arrow-parens": { "good": "", "bad": "" },
"arrow-return-shorthand": { "good": "", "bad": "" },
"callable-types": { "good": "", "bad": "" },
"class-name": { "good": "", "bad": "" },
"comment-format": { "good": "", "bad": "" },
"completed-docs": { "good": "", "bad": "" },
"encoding": { "good": "", "bad": "" },
"import-spacing": { "good": "", "bad": "" },
"interface-over-type-literal": { "good": "", "bad": "" },
"jsdoc-format": { "good": "", "bad": "" },
"new-parens": { "good": "", "bad": "" },
"newline-before-return": { "good": "", "bad": "" },
"newline-per-chained-call": { "good": "", "bad": "" },
"no-angle-bracket-type-assertion": { "good": "", "bad": "" },
"no-consecutive-blank-lines": { "good": "", "bad": "" },
"no-irregular-whitespace": { "good": "", "bad": "" },
"no-parameter-properties": { "good": "", "bad": "" },
"no-redundant-jsdoc": { "good": "", "bad": "" },
"no-reference-import": { "good": "", "bad": "" },
"no-trailing-whitespace": { "good": "", "bad": "" },
"no-unnecessary-initializer": { "good": "", "bad": "" },
"number-literal-format": { "good": "", "bad": "" },
"object-literal-shorthand": { "good": "", "bad": "" },
"one-line": { "good": "", "bad": "" },
"one-variable-per-declaration": { "good": "", "bad": "" },
"ordered-imports": { "good": "", "bad": "" },
"quotemark": { "good": "", "bad": "" },
"return-undefined": { "good": "", "bad": "" },
"semicolon": { "good": "", "bad": "" },
"space-before-function-paren": { "good": "", "bad": "" },
"space-within-parens": { "good": "", "bad": "" },
"type-literal-delimiter": { "good": "", "bad": "" },
"whitespace": { "good": "", "bad": "" }
}