@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,23 @@
|
|
|
1
|
+
# `no-typeof-type`
|
|
2
|
+
|
|
3
|
+
Disallow `typeof` in type context.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
TypeScript has bugs around `typeof` types. For example, sometimes you might get a red underline in the editor and spend half an hour debugging, just to find that "Reload TS server" makes an error go away.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = typeof foo;
|
|
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,30 @@
|
|
|
1
|
+
# `no-undefined-type`
|
|
2
|
+
|
|
3
|
+
Disallow the `undefined` type keyword in type positions.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
It usually appears in `Foo | undefined` context.
|
|
8
|
+
- `string | undefined` has `""` that sometimes will clash with `undefined` in `if ()` and boolean checks.
|
|
9
|
+
- `number | undefined` will cause this with `0`.
|
|
10
|
+
- `boolean | undefined`... well, you get the pattern.
|
|
11
|
+
- `T | undefined` where `T` is generic is a bug, because `T` might be `undefined` on its own, and in that case code is almost guaranteed to work incorrectly.
|
|
12
|
+
|
|
13
|
+
Use a proper `Option<T>` type. For example, `Option<T> = [T] | undefined`, or `{ $: 'Some', value: T } | { $: 'None' }`.
|
|
14
|
+
|
|
15
|
+
Examples of **incorrect** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Value = undefined;
|
|
19
|
+
type Value = string | undefined;
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Examples of **correct** code for this rule:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
type Value = string;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Options
|
|
29
|
+
|
|
30
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# `no-unknown`
|
|
2
|
+
|
|
3
|
+
Disallow the `unknown` type.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
All `unknown` must immediately go through some kind of schema parser, such as `zod`. If you have to store an `unknown` somewhere and had to write this type, this caught you on not using that kind of parser immediately.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = unknown;
|
|
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,25 @@
|
|
|
1
|
+
# `no-untagged-object-union`
|
|
2
|
+
|
|
3
|
+
Disallow unions of inline object types unless they share a literal tag field.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These will require an `in`-condition for narrowing to select either of the branches, and `in` typing is broken.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = { a: 1 } | { b: 2 };
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Value = 1 | 2;
|
|
19
|
+
type Value = "a" | "b";
|
|
20
|
+
type Value = { readonly kind: "a"; a: number } | { readonly kind: "b"; b: number };
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Options
|
|
24
|
+
|
|
25
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `no-utility-type`
|
|
2
|
+
|
|
3
|
+
Disallow built-in TypeScript utility types.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
These are conditional types in disguise.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = Omit<Foo, "bar">;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = Exclude<Foo, Bar>;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
type Value = Readonly<Foo>;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
type Value = ReturnType<() => Foo>;
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Examples of **correct** code for this rule:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
type Value = Foo;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `no-var`
|
|
2
|
+
|
|
3
|
+
Disallow `var` declarations unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
They're hoisted up to the function or module scope. `for (var i = 0; i < n; ++i) a.push(() => i)` creates an array of functions referencing the same value of `i === n`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
var value = 1;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const value = 1;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
24
|
+
|
|
25
|
+
## When not to use it
|
|
26
|
+
|
|
27
|
+
Disable this rule when an algorithm requires mutable declarations for performance.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `no-void-operator`
|
|
2
|
+
|
|
3
|
+
Disallow the runtime `void` operator.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
What for?
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
void foo();
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = void foo();
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
foo();
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# `no-while`
|
|
2
|
+
|
|
3
|
+
Disallow `while` loops and `do ... while` loops.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Every iteration must have at least an explicit "fuel" check. `while` _always_ eventually leads to infinite loops in production. Do you want the whole server or browser to hang on your code?
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
while (value < 1) {
|
|
13
|
+
value += 1;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
do {
|
|
19
|
+
value += 1;
|
|
20
|
+
} while (value < 1);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
for (const value of values) {
|
|
27
|
+
console.log(value);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Options
|
|
32
|
+
|
|
33
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# `require-boolean-prefix`
|
|
2
|
+
|
|
3
|
+
Require boolean variables and fields to start with an allowed boolean prefix.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Boolean variables and fields must start with `is`, `are`, `was`, `were`, `has`, `have`, `can`, `may`, `should`, `must`, `will`, `would`, `did`, `does`, `do`, `needs`, `need`, `requires`, `supports`, `allows`, `contains`, `includes`, `matches`, or `exists`.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const ready: boolean = true;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = { ready: boolean };
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const isReady: boolean = true;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
type Value = { hasItems: boolean };
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# `require-disjoint-union`
|
|
2
|
+
|
|
3
|
+
Require unions to stay literal-only or to use a shared literal tag field on each local object branch.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
All unions must be disjoint or string literal unions.
|
|
8
|
+
|
|
9
|
+
The tag field defaults to `$`.
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
type A = { readonly $: "a"; a: number };
|
|
15
|
+
type B = { readonly $: "a"; b: number };
|
|
16
|
+
type Value = A | B;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
type A = string;
|
|
21
|
+
type B = number;
|
|
22
|
+
type Value = A | B;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Examples of **correct** code for this rule:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
type Value = 1 | 2;
|
|
29
|
+
type Value = "a" | "b";
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
type A = { readonly $: "a"; a: number };
|
|
34
|
+
type B = { readonly $: "b"; b: number };
|
|
35
|
+
type Value = A | B;
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
interface A { readonly kind: "a"; a: number }
|
|
40
|
+
interface B { readonly kind: "b"; b: number }
|
|
41
|
+
type Value = A | B;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
type Value = { readonly $: "a"; a: number } | { readonly $: "b"; b: number };
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Options
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
[
|
|
52
|
+
{
|
|
53
|
+
"tagName": "kind"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Use `tagName` to change the shared literal tag field that disjoint object unions must use.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# `require-function-verb`
|
|
2
|
+
|
|
3
|
+
Require camelCase function variable names to start with an allowed verb prefix.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Names of variables that store a function must start with a verb, that store an object, string, number - with a noun.
|
|
8
|
+
Predicate functions must start with `check`.
|
|
9
|
+
Use `to` instead of `convert`.
|
|
10
|
+
Event handlers must start with `on*`.
|
|
11
|
+
The allowlist includes short established prefixes such as `assign`, `collect`, `emit`, `conv`, `elab`, `eq`, `neq`, `expect`, `extend`, `guard`, `main`, and `with`.
|
|
12
|
+
|
|
13
|
+
Examples of **incorrect** code for this rule:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const value = () => 1;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const convertValue = (value: string): number => Number(value);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const isReady = () => true;
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Examples of **correct** code for this rule:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
const getValue = () => 1;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const collectItems = () => [];
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const assignNode = () => 1;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const emitNode = (): string => "node";
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
const main = () => 1;
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
const guardNode = () => 1;
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
const toNumber = (value: string): number => Number(value);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const checkReady = () => true;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const eq = () => true;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
const expectValue = (): void => undefined;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const extendEnv = () => 1;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
const withStd = () => 1;
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
const onClick = () => undefined;
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Options
|
|
82
|
+
|
|
83
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# `require-identifier-case`
|
|
2
|
+
|
|
3
|
+
Require identifiers to use camelCase, PascalCase, `_camelCase`, or short `$` names.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
All names must be in `camelCase`, except for React components and type-like values (for example, zod schema) that must be in `PascalCase`.
|
|
8
|
+
|
|
9
|
+
This rule also allows identifiers that start with `_` and continue in `camelCase` (for unused variables), and identifiers that start with `$` and have up to 2 letters after it (for codegen name clash reasons).
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
const foo_bar = 1;
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type foo_type = { foo_bar: number };
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
const $abc = 1;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const _FooBar = 1;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Examples of **correct** code for this rule:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const fooBar = 1;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
type FooBar = { fooBar: number };
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
const _fooBar = 1;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
const $ = 0;
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
const $x = 1;
|
|
49
|
+
const $Ab = 2;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Options
|
|
53
|
+
|
|
54
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# `require-kebab-case-filename`
|
|
2
|
+
|
|
3
|
+
Require filenames to be in kebab-case.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
All filenames must be in kebab-case. It's Node's standard, meant to make the code safe to run on all operating systems (ahem, Windows that doesn't distinguish case in file names).
|
|
8
|
+
|
|
9
|
+
Yes, even source code of TypeScript doesn't use kebab case. Yes, they've already made their repo impossible to `git clone` on Windows with these. Wait, doesn't MS use their own OS for development?
|
|
10
|
+
|
|
11
|
+
Examples of **incorrect** code for this rule:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// filename: fooBar.ts
|
|
15
|
+
const value = 1;
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
// filename: foo_bar.ts
|
|
20
|
+
const value = 1;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
// filename: foo-bar.ts
|
|
27
|
+
const value = 1;
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
// filename: foo-bar.test.ts
|
|
32
|
+
const value = 1;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Options
|
|
36
|
+
|
|
37
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `require-named-union-branch`
|
|
2
|
+
|
|
3
|
+
Require every object-shaped union branch to be defined through its own name.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Every branch of the union type must have its own name, i.e. `{ ... } | { ... }` is invalid, and there must be two `type Foo` for each of the branches.
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = { readonly kind: "a"; readonly a: number } | { readonly kind: "b"; readonly b: number };
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = Foo | { readonly kind: "b"; readonly b: number };
|
|
17
|
+
type Foo = { readonly kind: "a"; readonly a: number };
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Examples of **correct** code for this rule:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
type A = { readonly kind: "a"; readonly a: number };
|
|
24
|
+
type B = { readonly kind: "b"; readonly b: number };
|
|
25
|
+
type Value = A | B;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
type Value = 1 | 2;
|
|
30
|
+
type Value = "a" | "b";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Options
|
|
34
|
+
|
|
35
|
+
This rule does not accept options.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `require-readonly-array`
|
|
2
|
+
|
|
3
|
+
Require array types to use `readonly T[]` unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Arrays should be readonly: `readonly string[]`
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = string[];
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = Array<string>;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
type Value = ReadonlyArray<string>;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Examples of **correct** code for this rule:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
type Value = readonly string[];
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
32
|
+
|
|
33
|
+
## When not to use it
|
|
34
|
+
|
|
35
|
+
Disable this rule when an algorithm requires mutable arrays for performance.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# `require-readonly-collections`
|
|
2
|
+
|
|
3
|
+
Require `ReadonlySet` and `ReadonlyMap` in types unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
`Set` and `Map` should be readonly: `env: ReadonlyMap<string, Type>`
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = Set<string>;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
type Value = Map<string, number>;
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Examples of **correct** code for this rule:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
type Value = ReadonlySet<string>;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
type Value = ReadonlyMap<string, number>;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Options
|
|
30
|
+
|
|
31
|
+
This rule does not accept options.
|
|
32
|
+
|
|
33
|
+
## When not to use it
|
|
34
|
+
|
|
35
|
+
Disable this rule when an algorithm requires mutable collections for performance.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# `require-readonly-object-fields`
|
|
2
|
+
|
|
3
|
+
Require `readonly` on all object type fields unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
All object fields must be `readonly`: `{ readonly foo: string }`.
|
|
8
|
+
|
|
9
|
+
By assigning into a tag field of an `A | B` union, we can narrow it to an `A` type while it will have `B` (or some arbitrary combination of `A` and `B`) at runtime.
|
|
10
|
+
|
|
11
|
+
If data are not immutable, it's possible to create loopy data with assignment, and cause infinite loops/recursion trying to walk that data.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
type A = { value: number, foo: A | undefined }
|
|
15
|
+
const a: A = { value: 1, foo: undefined };
|
|
16
|
+
a.foo = a;
|
|
17
|
+
// best luck walking or serializing it now
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Examples of **incorrect** code for this rule:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
type Value = { name: string };
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
type Value = { kind: "a"; readonly name: string } | { readonly kind: "b"; readonly name: string };
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Examples of **correct** code for this rule:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
type Value = { readonly name: string };
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
type Value = { readonly kind: "a"; readonly name: string } | { readonly kind: "b"; readonly name: string };
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Options
|
|
41
|
+
|
|
42
|
+
This rule does not accept options.
|
|
43
|
+
|
|
44
|
+
## When not to use it
|
|
45
|
+
|
|
46
|
+
Disable this rule when an algorithm requires mutable object fields, including tag fields, for performance.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# `require-readonly-tuple`
|
|
2
|
+
|
|
3
|
+
Require tuple types to use `readonly [...]` unless mutability is required for performance.
|
|
4
|
+
|
|
5
|
+
## Rule details
|
|
6
|
+
|
|
7
|
+
Tuples should be readonly: `readonly [string, number]`
|
|
8
|
+
|
|
9
|
+
Examples of **incorrect** code for this rule:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
type Value = [string, number];
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Examples of **correct** code for this rule:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
type Value = readonly [string, number];
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Options
|
|
22
|
+
|
|
23
|
+
This rule does not accept options.
|
|
24
|
+
|
|
25
|
+
## When not to use it
|
|
26
|
+
|
|
27
|
+
Disable this rule when an algorithm requires mutable tuples for performance.
|