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