@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,49 @@
|
|
|
1
|
+
# `no-object-as-map`
|
|
2
|
+
|
|
3
|
+
Disallow using plain objects as dynamic maps.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Objects have a set of quirks: numeric keys get listed before string keys, key order is not guaranteed, keys can be inherited from `Object.prototype`, and the `__proto__` key can be used for prototype pollution exploits. Unless a high performance of hashmap is needed, or an object is statically defined, use `Map`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const map = {};
|
|
13
|
+
const value = map[key];
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
const map = {};
|
|
18
|
+
map[key] = value;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const map = Object.create(null);
|
|
23
|
+
const value = map[key];
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
({})[key];
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Examples of **correct** code for this rule:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
const map = {};
|
|
34
|
+
const value = map.foo;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const map = {};
|
|
39
|
+
const value = map["foo"];
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
const map = new Map<string, number>();
|
|
44
|
+
const value = map.get(key);
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Options
|
|
48
|
+
|
|
49
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-object-spread`
|
|
2
|
+
|
|
3
|
+
Disallow object spread in object literals.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It will require intersection types or inheritance to type. Prefer aggregation: `{ ...a, b }` → `{ a, b }`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = { ...values };
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = { a: 1, ...values, b: 2 };
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const value = [...values];
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const value = { a: 1, b: 2 };
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# `no-object-stringification-hook`
|
|
2
|
+
|
|
3
|
+
Disallow runtime `.toString` and `.toJSON`, and defining `toString` and `toJSON` hooks on objects and classes.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These obfuscate results of `console.log`, making objects different depending on how they're logged (`util.inspect` wouldn't use them). Worse, they might cause `JSON.stringify` to return unexpected results, and it will be very hard to trace to the source.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = { toString: () => "x" };
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
class Value {
|
|
17
|
+
toJSON() {
|
|
18
|
+
return "x";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
value["toString"] = () => "x";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
value.toString();
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const stringify = value.toString;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Examples of **correct** code for this rule:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
interface Value {
|
|
39
|
+
toString(): string;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
const value = { name: "x" };
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Options
|
|
48
|
+
|
|
49
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# `no-optional-parameter`
|
|
2
|
+
|
|
3
|
+
Disallow optional parameters marked with `?` in functions and constructor parameter properties.
|
|
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 value(value?: number) {
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
class Value {
|
|
19
|
+
constructor(private value?: number) {}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
function value(value: number) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
class Value {
|
|
33
|
+
constructor(private value: number) {}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Options
|
|
38
|
+
|
|
39
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# `no-optional-property`
|
|
2
|
+
|
|
3
|
+
Disallow optional object fields marked with `?`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Every `?` doubles the number of cases that should be tested. Eventually, some combination of non-defined and undefined fields will be non-semantic. Prefer at least an explicit `foo: Bar | undefined`, or better, create a type with a descriptive name to make it a tagged union.
|
|
8
|
+
|
|
9
|
+
In JS, there is a distinction between a field that is not defined and a field that is `undefined` (sic). `'a' in {} === false`, `'a' in { a: undefined } === true`. TypeScript doesn't handle this properly in its type system.
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
type Value = { name?: string };
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
interface Value { name?: string; }
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Examples of **correct** code for this rule:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
type Value = { name: string };
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
interface Value { name: string; }
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Options
|
|
32
|
+
|
|
33
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# `no-overload`
|
|
2
|
+
|
|
3
|
+
Disallow function and method overloads.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It's almost the same as intersection types, which are broken.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
function f(x: string): string;
|
|
13
|
+
function f(x: number): number;
|
|
14
|
+
function f(x: string | number) {
|
|
15
|
+
return x;
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
function f(x: string | number) {
|
|
23
|
+
return x;
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Options
|
|
28
|
+
|
|
29
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# `no-param-assign`
|
|
2
|
+
|
|
3
|
+
Disallow assigning to function parameters unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
This is essentially a `let`, except it's ever present and hidden.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const setValue = (value: number): number => {
|
|
13
|
+
value = value + 1;
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Examples of **correct** code for this rule:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
const setValue = (value: number): number => value + 1;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Options
|
|
25
|
+
|
|
26
|
+
This rule does not accept options.
|
|
27
|
+
|
|
28
|
+
## When not to use it
|
|
29
|
+
|
|
30
|
+
Disable this rule when an algorithm requires parameter mutation for performance.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# `no-prototype-access`
|
|
2
|
+
|
|
3
|
+
Disallow runtime access to `prototype` and `__proto__`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Don't use a legacy form of OOP. It's even worse than just using OOP.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = foo.prototype;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = foo["__proto__"];
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const value = { prototype: 1 };
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
class Value { __proto__() {} }
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Examples of **correct** code for this rule:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const prototype = createPrototype();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
type Value = { prototype: string };
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const value = foo[prototype];
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Options
|
|
42
|
+
|
|
43
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# `no-proxy-reflect`
|
|
2
|
+
|
|
3
|
+
Disallow the `Proxy` and `Reflect` global objects.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These break the type safety, are incorrectly handled in debuggers, and lead to unexpected heisenbugs.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = Proxy;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = Reflect.apply(fn, thisArg, args);
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const value = new Proxy(target, handler);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const Proxy = createProxy();
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const Reflect = createReflect();
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const value = foo.Proxy;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Options
|
|
38
|
+
|
|
39
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `no-reexport-outside-entrypoint`
|
|
2
|
+
|
|
3
|
+
Disallow reexports outside files explicitly mentioned in `package.json` as entrypoints.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Do not use `index.ts` files to reexport, unless it's a root `index.ts` file of some library. IDEs still don't have proper support for this, and it just adds one more file to edit on every rename.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
export * from "./foo";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
export { foo } from "./foo";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
export * from "./foo";
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
This is only correct when the file is explicitly mentioned in `package.json` as an entrypoint.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const foo = 1;
|
|
29
|
+
|
|
30
|
+
export { foo };
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# `no-regular-expression`
|
|
2
|
+
|
|
3
|
+
Disallow regular-expression literals and global `RegExp()` constructor usage.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
The only available engine is worst-case exponential, is different between user-agents and their versions. Regexps are extremely brittle.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const value = /x/;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
RegExp("x");
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
new RegExp("x");
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const RegExp = (value: string): string => value;
|
|
27
|
+
RegExp("x");
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
const value = "x";
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Options
|
|
35
|
+
|
|
36
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# `no-require`
|
|
2
|
+
|
|
3
|
+
Disallow `require()` and Node `createRequire()`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Use `import`. It's (current year) now.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
require("node:fs");
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createRequire } from "node:module";
|
|
17
|
+
|
|
18
|
+
const require = createRequire(import.meta.url);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Examples of **correct** code for this rule:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { readFile } from "node:fs/promises";
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Options
|
|
28
|
+
|
|
29
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-rest-parameter`
|
|
2
|
+
|
|
3
|
+
Disallow rest parameters.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
TypeScript doesn't have "mapped tuple types", so typing these will be problematic. In most cases, passing an array would suffice and would only take two more characters to type.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const join = (...values: string[]): string => values.join(",");
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const join = (values: readonly string[]): string => values.join(",");
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# `no-switch`
|
|
2
|
+
|
|
3
|
+
Disallow `switch` statements.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Switch statements require extra considerations for unexpected passthrough, are bulky, and take an extra function to make exhaustive checks work.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
switch (value) {
|
|
13
|
+
case "a":
|
|
14
|
+
return 1;
|
|
15
|
+
default:
|
|
16
|
+
return 2;
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Examples of **correct** code for this rule:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
if (value === "a") {
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return 2;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Options
|
|
31
|
+
|
|
32
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `no-symbol`
|
|
2
|
+
|
|
3
|
+
Disallow `symbol` and `unique symbol` types.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These are very good for opaque/branded types, but have to be sandboxed in their own files and `eslint-ignore`d. The rule is here to ensure the rest of the code doesn't use them, and doesn't break opaque/branded type guarantees.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = symbol;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
declare const key: unique symbol;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
type Value = string;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
declare const key: string;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `no-try-catch`
|
|
2
|
+
|
|
3
|
+
Disallow `try ... catch`.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
`catch` is untyped: you get an `unknown`. Worse, most of the uses accidentally try to handle exceptions that they mustn't.
|
|
8
|
+
|
|
9
|
+
Every custom FooError must have its own `handleFooError()` exported next to it, that takes 2 functions corresponding to two `{}` of `try...catch`. The two functions must be `() => T` and `(error: FooError) => U`, and the result must be `T | U`. It handles errors of that type, and passes the rest through.
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
try {
|
|
15
|
+
return readFoo();
|
|
16
|
+
} catch (error) {
|
|
17
|
+
if (error instanceof FooError) {
|
|
18
|
+
return recoverFoo(error);
|
|
19
|
+
}
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Examples of **correct** code for this rule:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
export const handleFooError = createErrorHandler(FooError);
|
|
28
|
+
|
|
29
|
+
const value = handleFooError(
|
|
30
|
+
() => readFoo(),
|
|
31
|
+
error => recoverFoo(error),
|
|
32
|
+
);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Options
|
|
36
|
+
|
|
37
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# `no-ts-comment-directive`
|
|
2
|
+
|
|
3
|
+
Disallow TypeScript comment directives.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It's a worse version of `as` that can cause the TS compiler to enter an arbitrary incorrect state.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
const value = foo;
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Examples of **correct** code for this rule:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
// regular comment
|
|
20
|
+
const value = foo;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Options
|
|
24
|
+
|
|
25
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# `no-tuple`
|
|
2
|
+
|
|
3
|
+
Disallow tuple types.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Tuples are supposed to be used in a very generic code where individual elements of tuples bear no meaning at all. For the rest of the code, use objects.
|
|
8
|
+
|
|
9
|
+
TS gives them minimal distinction from arrays, and the type system is broken around them. Occasionally, for performance reasons, tuples might be a better option than objects.
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
type Pair = [string, number];
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Pair = readonly [string, number];
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Examples of **correct** code for this rule:
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
type Pair = { left: string; right: number };
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Options
|
|
28
|
+
|
|
29
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-type-guard`
|
|
2
|
+
|
|
3
|
+
Disallow TypeScript type guards.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These are just `as` in disguise: `const foo = (x: 1 | 2): x is 1 => x === 2;`. It might be used in straightforward cases, such as ADT boilerplate.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const isFoo = (value: string): value is Foo => true;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const isFoo = (value: string): boolean => value.length > 0;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-typeof-operator`
|
|
2
|
+
|
|
3
|
+
Disallow the runtime `typeof` operator.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
`<T>(x: T) => typeof x === 'number'`. Properly designed languages do not allow this.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const kind = typeof foo;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const value = foo;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|