@less-unsound/eslint-plugin 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +112 -0
- package/dist/cjs/index.js +355 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/rules/no-accidental-mutation.js +100 -0
- package/dist/cjs/rules/no-ambient-dom-globals.js +181 -0
- package/dist/cjs/rules/no-any.js +27 -0
- package/dist/cjs/rules/no-arguments-object.js +122 -0
- package/dist/cjs/rules/no-as-type-assertion.js +44 -0
- package/dist/cjs/rules/no-bigint.js +74 -0
- package/dist/cjs/rules/no-boolean-literal-compare.js +37 -0
- package/dist/cjs/rules/no-broad-types.js +50 -0
- package/dist/cjs/rules/no-buffer.js +146 -0
- package/dist/cjs/rules/no-class.js +39 -0
- package/dist/cjs/rules/no-comma-operator.js +27 -0
- package/dist/cjs/rules/no-conditional-type.js +27 -0
- package/dist/cjs/rules/no-default-parameter.js +71 -0
- package/dist/cjs/rules/no-enum.js +27 -0
- package/dist/cjs/rules/no-eval.js +33 -0
- package/dist/cjs/rules/no-export-default.js +45 -0
- package/dist/cjs/rules/no-for-in.js +27 -0
- package/dist/cjs/rules/no-for-let.js +39 -0
- package/dist/cjs/rules/no-function-constructor.js +84 -0
- package/dist/cjs/rules/no-function-keyword.js +48 -0
- package/dist/cjs/rules/no-generic-parameter-bounds.js +34 -0
- package/dist/cjs/rules/no-getter-setter.js +48 -0
- package/dist/cjs/rules/no-global-context.js +134 -0
- package/dist/cjs/rules/no-import-code-extension.js +70 -0
- package/dist/cjs/rules/no-import-rename.js +45 -0
- package/dist/cjs/rules/no-import-type.js +27 -0
- package/dist/cjs/rules/no-in-operator.js +27 -0
- package/dist/cjs/rules/no-indexed-access-type.js +27 -0
- package/dist/cjs/rules/no-indexed-object-type.js +53 -0
- package/dist/cjs/rules/no-inheritance.js +65 -0
- package/dist/cjs/rules/no-inline-tagged-object.js +95 -0
- package/dist/cjs/rules/no-intersection-type.js +27 -0
- package/dist/cjs/rules/no-json-static-method.js +158 -0
- package/dist/cjs/rules/no-keyof.js +27 -0
- package/dist/cjs/rules/no-let.js +45 -0
- package/dist/cjs/rules/no-mapped-object-type.js +27 -0
- package/dist/cjs/rules/no-never.js +27 -0
- package/dist/cjs/rules/no-non-null-assertion.js +27 -0
- package/dist/cjs/rules/no-null.js +36 -0
- package/dist/cjs/rules/no-object-as-map.js +138 -0
- package/dist/cjs/rules/no-object-spread.js +27 -0
- package/dist/cjs/rules/no-object-stringification-hook.js +101 -0
- package/dist/cjs/rules/no-optional-parameter.js +104 -0
- package/dist/cjs/rules/no-optional-property.js +30 -0
- package/dist/cjs/rules/no-overload.js +110 -0
- package/dist/cjs/rules/no-param-assign.js +94 -0
- package/dist/cjs/rules/no-prototype-access.js +79 -0
- package/dist/cjs/rules/no-proxy-reflect.js +112 -0
- package/dist/cjs/rules/no-reexport-outside-entrypoint.js +46 -0
- package/dist/cjs/rules/no-regular-expression.js +93 -0
- package/dist/cjs/rules/no-require.js +162 -0
- package/dist/cjs/rules/no-rest-parameter.js +38 -0
- package/dist/cjs/rules/no-switch.js +27 -0
- package/dist/cjs/rules/no-symbol.js +33 -0
- package/dist/cjs/rules/no-try-catch.js +30 -0
- package/dist/cjs/rules/no-ts-comment-directive.js +39 -0
- package/dist/cjs/rules/no-tuple.js +27 -0
- package/dist/cjs/rules/no-type-guard.js +27 -0
- package/dist/cjs/rules/no-typeof-operator.js +27 -0
- package/dist/cjs/rules/no-typeof-type.js +27 -0
- package/dist/cjs/rules/no-undefined-type.js +27 -0
- package/dist/cjs/rules/no-unknown.js +27 -0
- package/dist/cjs/rules/no-untagged-object-union.js +150 -0
- package/dist/cjs/rules/no-utility-type.js +57 -0
- package/dist/cjs/rules/no-var.js +27 -0
- package/dist/cjs/rules/no-void-operator.js +27 -0
- package/dist/cjs/rules/no-while.js +33 -0
- package/dist/cjs/rules/require-boolean-prefix.js +179 -0
- package/dist/cjs/rules/require-disjoint-union.js +228 -0
- package/dist/cjs/rules/require-function-verb.js +293 -0
- package/dist/cjs/rules/require-identifier-case.js +197 -0
- package/dist/cjs/rules/require-kebab-case-filename.js +45 -0
- package/dist/cjs/rules/require-named-union-branch.js +34 -0
- package/dist/cjs/rules/require-readonly-array.js +49 -0
- package/dist/cjs/rules/require-readonly-collections.js +37 -0
- package/dist/cjs/rules/require-readonly-object-fields.js +32 -0
- package/dist/cjs/rules/require-readonly-tuple.js +33 -0
- package/dist/cjs/rules/require-return-type.js +85 -0
- package/dist/cjs/rules/require-string-template-expression.js +55 -0
- package/dist/cjs/utils/create-rule.js +6 -0
- package/dist/cjs/utils/package-entrypoint.js +69 -0
- package/dist/cjs/utils/readonly.js +18 -0
- package/dist/cjs/utils/string-case.js +12 -0
- package/dist/cjs/utils/type-reference.js +35 -0
- package/dist/esm/index.d.ts +3568 -0
- package/dist/esm/index.js +352 -0
- package/dist/esm/rules/no-accidental-mutation.d.ts +3 -0
- package/dist/esm/rules/no-accidental-mutation.js +97 -0
- package/dist/esm/rules/no-ambient-dom-globals.d.ts +3 -0
- package/dist/esm/rules/no-ambient-dom-globals.js +178 -0
- package/dist/esm/rules/no-any.d.ts +3 -0
- package/dist/esm/rules/no-any.js +24 -0
- package/dist/esm/rules/no-arguments-object.d.ts +3 -0
- package/dist/esm/rules/no-arguments-object.js +119 -0
- package/dist/esm/rules/no-as-type-assertion.d.ts +3 -0
- package/dist/esm/rules/no-as-type-assertion.js +41 -0
- package/dist/esm/rules/no-bigint.d.ts +3 -0
- package/dist/esm/rules/no-bigint.js +71 -0
- package/dist/esm/rules/no-boolean-literal-compare.d.ts +3 -0
- package/dist/esm/rules/no-boolean-literal-compare.js +34 -0
- package/dist/esm/rules/no-broad-types.d.ts +3 -0
- package/dist/esm/rules/no-broad-types.js +47 -0
- package/dist/esm/rules/no-buffer.d.ts +3 -0
- package/dist/esm/rules/no-buffer.js +143 -0
- package/dist/esm/rules/no-class.d.ts +3 -0
- package/dist/esm/rules/no-class.js +36 -0
- package/dist/esm/rules/no-comma-operator.d.ts +3 -0
- package/dist/esm/rules/no-comma-operator.js +24 -0
- package/dist/esm/rules/no-conditional-type.d.ts +3 -0
- package/dist/esm/rules/no-conditional-type.js +24 -0
- package/dist/esm/rules/no-default-parameter.d.ts +3 -0
- package/dist/esm/rules/no-default-parameter.js +68 -0
- package/dist/esm/rules/no-enum.d.ts +3 -0
- package/dist/esm/rules/no-enum.js +24 -0
- package/dist/esm/rules/no-eval.d.ts +3 -0
- package/dist/esm/rules/no-eval.js +30 -0
- package/dist/esm/rules/no-export-default.d.ts +3 -0
- package/dist/esm/rules/no-export-default.js +42 -0
- package/dist/esm/rules/no-for-in.d.ts +3 -0
- package/dist/esm/rules/no-for-in.js +24 -0
- package/dist/esm/rules/no-for-let.d.ts +3 -0
- package/dist/esm/rules/no-for-let.js +36 -0
- package/dist/esm/rules/no-function-constructor.d.ts +3 -0
- package/dist/esm/rules/no-function-constructor.js +81 -0
- package/dist/esm/rules/no-function-keyword.d.ts +3 -0
- package/dist/esm/rules/no-function-keyword.js +45 -0
- package/dist/esm/rules/no-generic-parameter-bounds.d.ts +3 -0
- package/dist/esm/rules/no-generic-parameter-bounds.js +31 -0
- package/dist/esm/rules/no-getter-setter.d.ts +3 -0
- package/dist/esm/rules/no-getter-setter.js +45 -0
- package/dist/esm/rules/no-global-context.d.ts +3 -0
- package/dist/esm/rules/no-global-context.js +131 -0
- package/dist/esm/rules/no-import-code-extension.d.ts +4 -0
- package/dist/esm/rules/no-import-code-extension.js +67 -0
- package/dist/esm/rules/no-import-rename.d.ts +3 -0
- package/dist/esm/rules/no-import-rename.js +42 -0
- package/dist/esm/rules/no-import-type.d.ts +3 -0
- package/dist/esm/rules/no-import-type.js +24 -0
- package/dist/esm/rules/no-in-operator.d.ts +3 -0
- package/dist/esm/rules/no-in-operator.js +24 -0
- package/dist/esm/rules/no-indexed-access-type.d.ts +3 -0
- package/dist/esm/rules/no-indexed-access-type.js +24 -0
- package/dist/esm/rules/no-indexed-object-type.d.ts +3 -0
- package/dist/esm/rules/no-indexed-object-type.js +50 -0
- package/dist/esm/rules/no-inheritance.d.ts +3 -0
- package/dist/esm/rules/no-inheritance.js +62 -0
- package/dist/esm/rules/no-inline-tagged-object.d.ts +5 -0
- package/dist/esm/rules/no-inline-tagged-object.js +92 -0
- package/dist/esm/rules/no-intersection-type.d.ts +3 -0
- package/dist/esm/rules/no-intersection-type.js +24 -0
- package/dist/esm/rules/no-json-static-method.d.ts +3 -0
- package/dist/esm/rules/no-json-static-method.js +155 -0
- package/dist/esm/rules/no-keyof.d.ts +3 -0
- package/dist/esm/rules/no-keyof.js +24 -0
- package/dist/esm/rules/no-let.d.ts +3 -0
- package/dist/esm/rules/no-let.js +42 -0
- package/dist/esm/rules/no-mapped-object-type.d.ts +3 -0
- package/dist/esm/rules/no-mapped-object-type.js +24 -0
- package/dist/esm/rules/no-never.d.ts +3 -0
- package/dist/esm/rules/no-never.js +24 -0
- package/dist/esm/rules/no-non-null-assertion.d.ts +3 -0
- package/dist/esm/rules/no-non-null-assertion.js +24 -0
- package/dist/esm/rules/no-null.d.ts +3 -0
- package/dist/esm/rules/no-null.js +33 -0
- package/dist/esm/rules/no-object-as-map.d.ts +3 -0
- package/dist/esm/rules/no-object-as-map.js +135 -0
- package/dist/esm/rules/no-object-spread.d.ts +3 -0
- package/dist/esm/rules/no-object-spread.js +24 -0
- package/dist/esm/rules/no-object-stringification-hook.d.ts +3 -0
- package/dist/esm/rules/no-object-stringification-hook.js +98 -0
- package/dist/esm/rules/no-optional-parameter.d.ts +3 -0
- package/dist/esm/rules/no-optional-parameter.js +101 -0
- package/dist/esm/rules/no-optional-property.d.ts +3 -0
- package/dist/esm/rules/no-optional-property.js +27 -0
- package/dist/esm/rules/no-overload.d.ts +3 -0
- package/dist/esm/rules/no-overload.js +107 -0
- package/dist/esm/rules/no-param-assign.d.ts +3 -0
- package/dist/esm/rules/no-param-assign.js +91 -0
- package/dist/esm/rules/no-prototype-access.d.ts +3 -0
- package/dist/esm/rules/no-prototype-access.js +76 -0
- package/dist/esm/rules/no-proxy-reflect.d.ts +3 -0
- package/dist/esm/rules/no-proxy-reflect.js +109 -0
- package/dist/esm/rules/no-reexport-outside-entrypoint.d.ts +3 -0
- package/dist/esm/rules/no-reexport-outside-entrypoint.js +43 -0
- package/dist/esm/rules/no-regular-expression.d.ts +3 -0
- package/dist/esm/rules/no-regular-expression.js +90 -0
- package/dist/esm/rules/no-require.d.ts +3 -0
- package/dist/esm/rules/no-require.js +159 -0
- package/dist/esm/rules/no-rest-parameter.d.ts +3 -0
- package/dist/esm/rules/no-rest-parameter.js +35 -0
- package/dist/esm/rules/no-switch.d.ts +3 -0
- package/dist/esm/rules/no-switch.js +24 -0
- package/dist/esm/rules/no-symbol.d.ts +3 -0
- package/dist/esm/rules/no-symbol.js +30 -0
- package/dist/esm/rules/no-try-catch.d.ts +3 -0
- package/dist/esm/rules/no-try-catch.js +27 -0
- package/dist/esm/rules/no-ts-comment-directive.d.ts +3 -0
- package/dist/esm/rules/no-ts-comment-directive.js +36 -0
- package/dist/esm/rules/no-tuple.d.ts +3 -0
- package/dist/esm/rules/no-tuple.js +24 -0
- package/dist/esm/rules/no-type-guard.d.ts +3 -0
- package/dist/esm/rules/no-type-guard.js +24 -0
- package/dist/esm/rules/no-typeof-operator.d.ts +3 -0
- package/dist/esm/rules/no-typeof-operator.js +24 -0
- package/dist/esm/rules/no-typeof-type.d.ts +3 -0
- package/dist/esm/rules/no-typeof-type.js +24 -0
- package/dist/esm/rules/no-undefined-type.d.ts +3 -0
- package/dist/esm/rules/no-undefined-type.js +24 -0
- package/dist/esm/rules/no-unknown.d.ts +3 -0
- package/dist/esm/rules/no-unknown.js +24 -0
- package/dist/esm/rules/no-untagged-object-union.d.ts +3 -0
- package/dist/esm/rules/no-untagged-object-union.js +147 -0
- package/dist/esm/rules/no-utility-type.d.ts +3 -0
- package/dist/esm/rules/no-utility-type.js +54 -0
- package/dist/esm/rules/no-var.d.ts +3 -0
- package/dist/esm/rules/no-var.js +24 -0
- package/dist/esm/rules/no-void-operator.d.ts +3 -0
- package/dist/esm/rules/no-void-operator.js +24 -0
- package/dist/esm/rules/no-while.d.ts +3 -0
- package/dist/esm/rules/no-while.js +30 -0
- package/dist/esm/rules/require-boolean-prefix.d.ts +4 -0
- package/dist/esm/rules/require-boolean-prefix.js +176 -0
- package/dist/esm/rules/require-disjoint-union.d.ts +5 -0
- package/dist/esm/rules/require-disjoint-union.js +225 -0
- package/dist/esm/rules/require-function-verb.d.ts +4 -0
- package/dist/esm/rules/require-function-verb.js +290 -0
- package/dist/esm/rules/require-identifier-case.d.ts +4 -0
- package/dist/esm/rules/require-identifier-case.js +194 -0
- package/dist/esm/rules/require-kebab-case-filename.d.ts +4 -0
- package/dist/esm/rules/require-kebab-case-filename.js +42 -0
- package/dist/esm/rules/require-named-union-branch.d.ts +3 -0
- package/dist/esm/rules/require-named-union-branch.js +31 -0
- package/dist/esm/rules/require-readonly-array.d.ts +3 -0
- package/dist/esm/rules/require-readonly-array.js +46 -0
- package/dist/esm/rules/require-readonly-collections.d.ts +3 -0
- package/dist/esm/rules/require-readonly-collections.js +34 -0
- package/dist/esm/rules/require-readonly-object-fields.d.ts +3 -0
- package/dist/esm/rules/require-readonly-object-fields.js +29 -0
- package/dist/esm/rules/require-readonly-tuple.d.ts +3 -0
- package/dist/esm/rules/require-readonly-tuple.js +30 -0
- package/dist/esm/rules/require-return-type.d.ts +4 -0
- package/dist/esm/rules/require-return-type.js +79 -0
- package/dist/esm/rules/require-string-template-expression.d.ts +4 -0
- package/dist/esm/rules/require-string-template-expression.js +52 -0
- package/dist/esm/utils/create-rule.d.ts +4 -0
- package/dist/esm/utils/create-rule.js +3 -0
- package/dist/esm/utils/package-entrypoint.d.ts +2 -0
- package/dist/esm/utils/package-entrypoint.js +64 -0
- package/dist/esm/utils/readonly.d.ts +2 -0
- package/dist/esm/utils/readonly.js +14 -0
- package/dist/esm/utils/string-case.d.ts +3 -0
- package/dist/esm/utils/string-case.js +6 -0
- package/dist/esm/utils/type-reference.d.ts +2 -0
- package/dist/esm/utils/type-reference.js +31 -0
- package/docs/rules/no-accidental-mutation.md +39 -0
- package/docs/rules/no-ambient-dom-globals.md +37 -0
- package/docs/rules/no-any.md +23 -0
- package/docs/rules/no-arguments-object.md +35 -0
- package/docs/rules/no-as-type-assertion.md +26 -0
- package/docs/rules/no-bigint.md +31 -0
- package/docs/rules/no-boolean-literal-compare.md +31 -0
- package/docs/rules/no-broad-types.md +27 -0
- package/docs/rules/no-buffer.md +31 -0
- package/docs/rules/no-class.md +56 -0
- package/docs/rules/no-comma-operator.md +31 -0
- package/docs/rules/no-conditional-type.md +23 -0
- package/docs/rules/no-default-parameter.md +43 -0
- package/docs/rules/no-enum.md +31 -0
- package/docs/rules/no-eval.md +27 -0
- package/docs/rules/no-export-default.md +28 -0
- package/docs/rules/no-for-in.md +23 -0
- package/docs/rules/no-for-let.md +31 -0
- package/docs/rules/no-function-constructor.md +27 -0
- package/docs/rules/no-function-keyword.md +37 -0
- package/docs/rules/no-generic-parameter-bounds.md +25 -0
- package/docs/rules/no-getter-setter.md +55 -0
- package/docs/rules/no-global-context.md +50 -0
- package/docs/rules/no-import-code-extension.md +39 -0
- package/docs/rules/no-import-rename.md +31 -0
- package/docs/rules/no-import-type.md +25 -0
- package/docs/rules/no-in-operator.md +23 -0
- package/docs/rules/no-indexed-access-type.md +33 -0
- package/docs/rules/no-indexed-object-type.md +23 -0
- package/docs/rules/no-inheritance.md +31 -0
- package/docs/rules/no-inline-tagged-object.md +41 -0
- package/docs/rules/no-intersection-type.md +23 -0
- package/docs/rules/no-json-static-method.md +46 -0
- package/docs/rules/no-keyof.md +35 -0
- package/docs/rules/no-let.md +31 -0
- package/docs/rules/no-mapped-object-type.md +23 -0
- package/docs/rules/no-never.md +35 -0
- package/docs/rules/no-non-null-assertion.md +23 -0
- package/docs/rules/no-null.md +31 -0
- package/docs/rules/no-object-as-map.md +49 -0
- package/docs/rules/no-object-spread.md +31 -0
- package/docs/rules/no-object-stringification-hook.md +49 -0
- package/docs/rules/no-optional-parameter.md +39 -0
- package/docs/rules/no-optional-property.md +33 -0
- package/docs/rules/no-overload.md +29 -0
- package/docs/rules/no-param-assign.md +30 -0
- package/docs/rules/no-prototype-access.md +43 -0
- package/docs/rules/no-proxy-reflect.md +39 -0
- package/docs/rules/no-reexport-outside-entrypoint.md +35 -0
- package/docs/rules/no-regular-expression.md +36 -0
- package/docs/rules/no-require.md +29 -0
- package/docs/rules/no-rest-parameter.md +23 -0
- package/docs/rules/no-switch.md +32 -0
- package/docs/rules/no-symbol.md +31 -0
- package/docs/rules/no-try-catch.md +37 -0
- package/docs/rules/no-ts-comment-directive.md +25 -0
- package/docs/rules/no-tuple.md +29 -0
- package/docs/rules/no-type-guard.md +23 -0
- package/docs/rules/no-typeof-operator.md +23 -0
- package/docs/rules/no-typeof-type.md +23 -0
- package/docs/rules/no-undefined-type.md +30 -0
- package/docs/rules/no-unknown.md +23 -0
- package/docs/rules/no-untagged-object-union.md +25 -0
- package/docs/rules/no-utility-type.md +35 -0
- package/docs/rules/no-var.md +27 -0
- package/docs/rules/no-void-operator.md +27 -0
- package/docs/rules/no-while.md +33 -0
- package/docs/rules/require-boolean-prefix.md +31 -0
- package/docs/rules/require-disjoint-union.md +58 -0
- package/docs/rules/require-function-verb.md +83 -0
- package/docs/rules/require-identifier-case.md +54 -0
- package/docs/rules/require-kebab-case-filename.md +37 -0
- package/docs/rules/require-named-union-branch.md +35 -0
- package/docs/rules/require-readonly-array.md +35 -0
- package/docs/rules/require-readonly-collections.md +35 -0
- package/docs/rules/require-readonly-object-fields.md +46 -0
- package/docs/rules/require-readonly-tuple.md +27 -0
- package/docs/rules/require-return-type.md +37 -0
- package/docs/rules/require-string-template-expression.md +38 -0
- package/package.json +70 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
|
+
export const isReadonlyType = (node) => {
|
|
3
|
+
const parent = node.parent;
|
|
4
|
+
if (parent === undefined) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
if (parent.type !== AST_NODE_TYPES.TSTypeOperator) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
if (parent.operator !== "readonly") {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return parent.typeAnnotation === node;
|
|
14
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const kebabCasePattern = /^[a-z0-9][a-z0-9.-]*$/u;
|
|
2
|
+
const camelCasePattern = /^[a-z][A-Za-z0-9]*$/u;
|
|
3
|
+
const pascalCasePattern = /^[A-Z][A-Za-z0-9]*$/u;
|
|
4
|
+
export const isKebabCase = (value) => value === "" || kebabCasePattern.test(value);
|
|
5
|
+
export const isCamelCase = (value) => camelCasePattern.test(value);
|
|
6
|
+
export const isPascalCase = (value) => pascalCasePattern.test(value);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
2
|
+
const isIdentifierTypeName = (typeName, name) => {
|
|
3
|
+
if (typeName.type !== AST_NODE_TYPES.Identifier) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
return typeName.name === name;
|
|
7
|
+
};
|
|
8
|
+
const containsTypeReferenceValue = (value, name, seen) => {
|
|
9
|
+
if (typeof value !== "object" || value === null) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const objectValue = value;
|
|
13
|
+
if (seen.has(objectValue)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
seen.add(objectValue);
|
|
17
|
+
const typedValue = value;
|
|
18
|
+
if (typedValue.type === AST_NODE_TYPES.TSTypeReference) {
|
|
19
|
+
const node = value;
|
|
20
|
+
if (isIdentifierTypeName(node.typeName, name)) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return Object.entries(value).some(([key, child]) => {
|
|
25
|
+
if (key === "parent") {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return containsTypeReferenceValue(child, name, seen);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
export const containsTypeReference = (node, name) => containsTypeReferenceValue(node, name, new WeakSet());
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# `no-accidental-mutation`
|
|
2
|
+
|
|
3
|
+
Disallow in-place `.sort()`, `.reverse()`, and `.splice()` on non-fresh arrays unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Clone arrays before `.sort()`, `.reverse()`, `.splice()`: `[...arr].sort()`
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
values.sort();
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
values.reverse();
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
values.splice(0, 1);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
[...values].sort();
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
values.slice().reverse();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
This rule does not accept options.
|
|
36
|
+
|
|
37
|
+
## When not to use it
|
|
38
|
+
|
|
39
|
+
Disable this rule when an algorithm requires in-place array mutation for performance.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `no-ambient-dom-globals`
|
|
2
|
+
|
|
3
|
+
Disallow the confusing ambient browser-global surface.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Ban ambient DOM declarations (use of global `name` etc; find existing package that does this and follow suit).
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
name;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
blur;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const name = 1;
|
|
23
|
+
name;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
const window = { name: 1 };
|
|
28
|
+
window.name;
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
({ name: 1 });
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Options
|
|
36
|
+
|
|
37
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-any`
|
|
2
|
+
|
|
3
|
+
Disallow the `any` type.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Its actual meaning is "completely disregard type errors here". It has no basis in type theory. This will just break your code. At the very least, use `unknown` or `never`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = any;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Value = string;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `no-arguments-object`
|
|
2
|
+
|
|
3
|
+
Disallow the `arguments` object.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
In general, variadic functions cause typing problems and are unsafe to have in the code. If absolutely needed, use `...rest`, at least it will return an array, and not some quirky array-like object.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
function foo() {
|
|
13
|
+
return arguments;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const foo = () => arguments[0];
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Examples of **correct** code for this rule:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
function foo(arguments: number) {
|
|
25
|
+
return arguments;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const value = { arguments: 1 };
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# `no-as-type-assertion`
|
|
2
|
+
|
|
3
|
+
Disallow `as` type assertions except `as const`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It was meant to gradually type legacy code, not for production use in TS-native projects. Often, instead of `x as T` it should have been:
|
|
8
|
+
- `const y: T = x;`
|
|
9
|
+
- or `x satisfies T`
|
|
10
|
+
- or `foo = new Array<T>()`
|
|
11
|
+
|
|
12
|
+
Examples of **incorrect** code for this rule:
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
const value = input as Foo;
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Examples of **correct** code for this rule:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
const value = [1, 2] as const;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Options
|
|
25
|
+
|
|
26
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-bigint`
|
|
2
|
+
|
|
3
|
+
Disallow `bigint` types and values.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Very rarely needed, and quite slow. If there is actually code that works with large integers, ignore this rule.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = 1n;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value: bigint = 1 as never;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const value = BigInt(1);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const value = 1;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-boolean-literal-compare`
|
|
2
|
+
|
|
3
|
+
Disallow equality comparisons to boolean literals.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Bans bogus boolean operations, such as `=== true` and `=== false`. If you have `boolean | undefined` type and actually have to do such checks, change this type to something better.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = isReady === true;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = isReady !== false;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const value = isReady;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const value = !isReady;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `no-broad-types`
|
|
2
|
+
|
|
3
|
+
Disallow `Object`, `object`, `{}`, and `Function` types.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
There's barely a case when common supertypes of objects and functions are even needed.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = object;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = {};
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
type Value = { readonly name: string };
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-buffer`
|
|
2
|
+
|
|
3
|
+
Disallow global `Buffer` types and values.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
`Buffer` is Node's old, quirky and non-portable type, that has to be polyfilled if the code is ever used in the browser. Use `Uint8Array` instead.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = Buffer.from("x");
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value: Buffer = data;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const value = new Uint8Array();
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const value: Uint8Array = data;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# `no-class`
|
|
2
|
+
|
|
3
|
+
Disallow `class` declarations and expressions.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
OOP in TypeScript just doesn't work.
|
|
8
|
+
|
|
9
|
+
- In TS `private` is only a type system feature, and all the "private" fields are globally accessible at runtime.
|
|
10
|
+
- Objects have part of their description in `prototype`, and can't be worked with as regular objects.
|
|
11
|
+
- Methods don't store a reference to `this` in their closure and take it from object syntactically, i.e., `x.f()` would use `x` as `this`. It means `const { f } = x; f();` will be a runtime error, and TypeScript would emit no error here at compile time.
|
|
12
|
+
- TypeScript doesn't statically ensure that OOP actually works. For example, you can easily break Liskov's substitution principle with class implementations.
|
|
13
|
+
|
|
14
|
+
If a `class` is converted into a regular function, all the fields are correctly private; accessing them requires no `this.` prefix, and in most frequent cases, the only exposed method can be returned directly.
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
class Foo {
|
|
18
|
+
private y: number;
|
|
19
|
+
constructor(_y: number) {
|
|
20
|
+
this.y = _y;
|
|
21
|
+
}
|
|
22
|
+
bar(x: number) {
|
|
23
|
+
return x + y;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const Foo = (y: number) => {
|
|
28
|
+
const bar = (x: number) => x + y;
|
|
29
|
+
return { bar };
|
|
30
|
+
};
|
|
31
|
+
// nobody can ever access `y` now: it's actually private
|
|
32
|
+
|
|
33
|
+
const Foo = (y: number) => (x: number) => x + y;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The only case when `class` might actually be useful is if you create billions of objects. `prototype` is a single pointer to an object with methods for all the instances of the class, while the approach above will create objects with methods
|
|
37
|
+
|
|
38
|
+
Examples of **incorrect** code for this rule:
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
class Foo {}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
const Foo = class {};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Examples of **correct** code for this rule:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
class Foo extends Bar {}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Options
|
|
55
|
+
|
|
56
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-comma-operator`
|
|
2
|
+
|
|
3
|
+
Disallow the comma operator.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Seriously?
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = (foo, bar);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = (readFoo(), readBar());
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const value = bar;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const values = [foo, bar];
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-conditional-type`
|
|
2
|
+
|
|
3
|
+
Disallow conditional types.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These lack any theory behind them and were meant to type legacy JS code.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value<T> = T extends string ? 1 : 2;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Value = string | number;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# `no-default-parameter`
|
|
2
|
+
|
|
3
|
+
Disallow default parameters.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
TypeScript has a quirk that allows passing the function with fewer arguments to a parameter list that requires more. Eventually, this leads to passing unexpected values to optional parameters. Prefer decomposing the function into two, where one takes a full set of parameters, and the other one is a simpler version that takes less.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
function f(value = 1) {}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const f = (value = 1) => value;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
class Value {
|
|
21
|
+
constructor(private value = 1) {}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Examples of **correct** code for this rule:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
function f(value: number) {}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const f = (value: number) => value;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
class Value {
|
|
37
|
+
constructor(private value: number) {}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Options
|
|
42
|
+
|
|
43
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-enum`
|
|
2
|
+
|
|
3
|
+
Disallow `enum` and `const enum` declarations.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It's equivalent to unions since 5.0, except generates boilerplate JS code. A version that doesn't generate extraneous code, `const enum`, is not properly supported by `babel`. Neither is supported by Node's type stripping.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
enum Value {
|
|
13
|
+
A
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const enum Value {
|
|
19
|
+
A
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const value = 1;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `no-eval`
|
|
2
|
+
|
|
3
|
+
Disallow `eval`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It's impossible to typecheck.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
eval(code);
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
eval?.(code);
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const value = run(code);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# `no-export-default`
|
|
2
|
+
|
|
3
|
+
Disallow default exports.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It breaks IDE features such as renaming and also has complex semantics. Google for a full page of links to articles that explain why precisely. Next.js enforces these on users? Well, never use Next.js.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
export default 1;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = 1;
|
|
17
|
+
export { value as default };
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Examples of **correct** code for this rule:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
export const value = 1;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Options
|
|
27
|
+
|
|
28
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-for-in`
|
|
2
|
+
|
|
3
|
+
Disallow `for (... in ...)` loops.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It requires a `hasOwnProperty` check. Prefer `Object.entries`, `Object.keys`, or `Object.values`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
for (const key in object) {}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
for (const value of values) {}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-for-let`
|
|
2
|
+
|
|
3
|
+
Disallow `for (let ...)` loops.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Prefer built-in array methods, unless mutability is required for performance. But if you really do it for performance, you should probably know that it should be `var`, not `let`?
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
for (let index = 0; index < 1; index += 1) {
|
|
13
|
+
console.log(index);
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Examples of **correct** code for this rule:
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
for (const value of values) {
|
|
21
|
+
console.log(value);
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
This rule does not accept options.
|
|
28
|
+
|
|
29
|
+
## When not to use it
|
|
30
|
+
|
|
31
|
+
Disable this rule when an algorithm requires mutable loop state for performance.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `no-function-constructor`
|
|
2
|
+
|
|
3
|
+
Disallow global `Function` constructor usage.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Use normal function types: `(a: A) => B`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
Function("return 1;");
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
new Function("return 1;");
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const run = (): number => 1;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
This rule does not accept options.
|