eslint-plugin-typefest 1.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/CHANGELOG.md +1814 -0
- package/LICENSE +21 -0
- package/README.md +282 -0
- package/dist/_internal/array-like-expression.d.ts +67 -0
- package/dist/_internal/array-like-expression.d.ts.map +1 -0
- package/dist/_internal/array-like-expression.js +179 -0
- package/dist/_internal/array-like-expression.js.map +1 -0
- package/dist/_internal/array-method-call-rule.d.ts +34 -0
- package/dist/_internal/array-method-call-rule.d.ts.map +1 -0
- package/dist/_internal/array-method-call-rule.js +49 -0
- package/dist/_internal/array-method-call-rule.js.map +1 -0
- package/dist/_internal/ast-node.d.ts +23 -0
- package/dist/_internal/ast-node.d.ts.map +1 -0
- package/dist/_internal/ast-node.js +38 -0
- package/dist/_internal/ast-node.js.map +1 -0
- package/dist/_internal/bounded-cache.d.ts +42 -0
- package/dist/_internal/bounded-cache.d.ts.map +1 -0
- package/dist/_internal/bounded-cache.js +57 -0
- package/dist/_internal/bounded-cache.js.map +1 -0
- package/dist/_internal/constrained-type-at-location.d.ts +31 -0
- package/dist/_internal/constrained-type-at-location.d.ts.map +1 -0
- package/dist/_internal/constrained-type-at-location.js +61 -0
- package/dist/_internal/constrained-type-at-location.js.map +1 -0
- package/dist/_internal/cycle-safe-linked-search.d.ts +48 -0
- package/dist/_internal/cycle-safe-linked-search.d.ts.map +1 -0
- package/dist/_internal/cycle-safe-linked-search.js +70 -0
- package/dist/_internal/cycle-safe-linked-search.js.map +1 -0
- package/dist/_internal/expression-boolean-memoizer.d.ts +17 -0
- package/dist/_internal/expression-boolean-memoizer.d.ts.map +1 -0
- package/dist/_internal/expression-boolean-memoizer.js +23 -0
- package/dist/_internal/expression-boolean-memoizer.js.map +1 -0
- package/dist/_internal/filter-callback.d.ts +56 -0
- package/dist/_internal/filter-callback.d.ts.map +1 -0
- package/dist/_internal/filter-callback.js +100 -0
- package/dist/_internal/filter-callback.js.map +1 -0
- package/dist/_internal/global-identifier-member-call.d.ts +23 -0
- package/dist/_internal/global-identifier-member-call.d.ts.map +1 -0
- package/dist/_internal/global-identifier-member-call.js +25 -0
- package/dist/_internal/global-identifier-member-call.js.map +1 -0
- package/dist/_internal/global-member-call-rule.d.ts +36 -0
- package/dist/_internal/global-member-call-rule.d.ts.map +1 -0
- package/dist/_internal/global-member-call-rule.js +52 -0
- package/dist/_internal/global-member-call-rule.js.map +1 -0
- package/dist/_internal/import-analysis.d.ts +45 -0
- package/dist/_internal/import-analysis.d.ts.map +1 -0
- package/dist/_internal/import-analysis.js +113 -0
- package/dist/_internal/import-analysis.js.map +1 -0
- package/dist/_internal/import-aware-fixes.d.ts +31 -0
- package/dist/_internal/import-aware-fixes.d.ts.map +1 -0
- package/dist/_internal/import-aware-fixes.js +38 -0
- package/dist/_internal/import-aware-fixes.js.map +1 -0
- package/dist/_internal/import-fix-coordinator.d.ts +43 -0
- package/dist/_internal/import-fix-coordinator.d.ts.map +1 -0
- package/dist/_internal/import-fix-coordinator.js +71 -0
- package/dist/_internal/import-fix-coordinator.js.map +1 -0
- package/dist/_internal/import-insertion.d.ts +27 -0
- package/dist/_internal/import-insertion.d.ts.map +1 -0
- package/dist/_internal/import-insertion.js +295 -0
- package/dist/_internal/import-insertion.js.map +1 -0
- package/dist/_internal/imported-type-aliases.d.ts +140 -0
- package/dist/_internal/imported-type-aliases.d.ts.map +1 -0
- package/dist/_internal/imported-type-aliases.js +316 -0
- package/dist/_internal/imported-type-aliases.js.map +1 -0
- package/dist/_internal/imported-value-symbols.d.ts +157 -0
- package/dist/_internal/imported-value-symbols.d.ts.map +1 -0
- package/dist/_internal/imported-value-symbols.js +478 -0
- package/dist/_internal/imported-value-symbols.js.map +1 -0
- package/dist/_internal/member-call.d.ts +53 -0
- package/dist/_internal/member-call.d.ts.map +1 -0
- package/dist/_internal/member-call.js +48 -0
- package/dist/_internal/member-call.js.map +1 -0
- package/dist/_internal/module-source.d.ts +11 -0
- package/dist/_internal/module-source.d.ts.map +1 -0
- package/dist/_internal/module-source.js +11 -0
- package/dist/_internal/module-source.js.map +1 -0
- package/dist/_internal/normalize-expression-text.d.ts +26 -0
- package/dist/_internal/normalize-expression-text.d.ts.map +1 -0
- package/dist/_internal/normalize-expression-text.js +182 -0
- package/dist/_internal/normalize-expression-text.js.map +1 -0
- package/dist/_internal/nullish-comparison.d.ts +43 -0
- package/dist/_internal/nullish-comparison.d.ts.map +1 -0
- package/dist/_internal/nullish-comparison.js +147 -0
- package/dist/_internal/nullish-comparison.js.map +1 -0
- package/dist/_internal/plugin-settings.d.ts +32 -0
- package/dist/_internal/plugin-settings.d.ts.map +1 -0
- package/dist/_internal/plugin-settings.js +118 -0
- package/dist/_internal/plugin-settings.js.map +1 -0
- package/dist/_internal/report-adapter.d.ts +25 -0
- package/dist/_internal/report-adapter.d.ts.map +1 -0
- package/dist/_internal/report-adapter.js +36 -0
- package/dist/_internal/report-adapter.js.map +1 -0
- package/dist/_internal/rule-catalog.d.ts +51 -0
- package/dist/_internal/rule-catalog.d.ts.map +1 -0
- package/dist/_internal/rule-catalog.js +162 -0
- package/dist/_internal/rule-catalog.js.map +1 -0
- package/dist/_internal/rule-docs-metadata.d.ts +37 -0
- package/dist/_internal/rule-docs-metadata.d.ts.map +1 -0
- package/dist/_internal/rule-docs-metadata.js +192 -0
- package/dist/_internal/rule-docs-metadata.js.map +1 -0
- package/dist/_internal/rule-docs-url.d.ts +15 -0
- package/dist/_internal/rule-docs-url.d.ts.map +1 -0
- package/dist/_internal/rule-docs-url.js +15 -0
- package/dist/_internal/rule-docs-url.js.map +1 -0
- package/dist/_internal/rule-reporting.d.ts +71 -0
- package/dist/_internal/rule-reporting.d.ts.map +1 -0
- package/dist/_internal/rule-reporting.js +89 -0
- package/dist/_internal/rule-reporting.js.map +1 -0
- package/dist/_internal/rules-registry.d.ts +14 -0
- package/dist/_internal/rules-registry.d.ts.map +1 -0
- package/dist/_internal/rules-registry.js +165 -0
- package/dist/_internal/rules-registry.js.map +1 -0
- package/dist/_internal/safe-type-operation.d.ts +89 -0
- package/dist/_internal/safe-type-operation.d.ts.map +1 -0
- package/dist/_internal/safe-type-operation.js +147 -0
- package/dist/_internal/safe-type-operation.js.map +1 -0
- package/dist/_internal/scope-resolution.d.ts +20 -0
- package/dist/_internal/scope-resolution.d.ts.map +1 -0
- package/dist/_internal/scope-resolution.js +21 -0
- package/dist/_internal/scope-resolution.js.map +1 -0
- package/dist/_internal/scope-variable.d.ts +17 -0
- package/dist/_internal/scope-variable.d.ts.map +1 -0
- package/dist/_internal/scope-variable.js +30 -0
- package/dist/_internal/scope-variable.js.map +1 -0
- package/dist/_internal/set-membership.d.ts +6 -0
- package/dist/_internal/set-membership.d.ts.map +1 -0
- package/dist/_internal/set-membership.js +11 -0
- package/dist/_internal/set-membership.js.map +1 -0
- package/dist/_internal/text-character.d.ts +18 -0
- package/dist/_internal/text-character.d.ts.map +1 -0
- package/dist/_internal/text-character.js +69 -0
- package/dist/_internal/text-character.js.map +1 -0
- package/dist/_internal/throw-consequent.d.ts +22 -0
- package/dist/_internal/throw-consequent.d.ts.map +1 -0
- package/dist/_internal/throw-consequent.js +48 -0
- package/dist/_internal/throw-consequent.js.map +1 -0
- package/dist/_internal/throw-type-error.d.ts +19 -0
- package/dist/_internal/throw-type-error.d.ts.map +1 -0
- package/dist/_internal/throw-type-error.js +24 -0
- package/dist/_internal/throw-type-error.js.map +1 -0
- package/dist/_internal/type-checker-compat.d.ts +80 -0
- package/dist/_internal/type-checker-compat.d.ts.map +1 -0
- package/dist/_internal/type-checker-compat.js +104 -0
- package/dist/_internal/type-checker-compat.js.map +1 -0
- package/dist/_internal/type-predicate-autofix-safety.d.ts +20 -0
- package/dist/_internal/type-predicate-autofix-safety.d.ts.map +1 -0
- package/dist/_internal/type-predicate-autofix-safety.js +58 -0
- package/dist/_internal/type-predicate-autofix-safety.js.map +1 -0
- package/dist/_internal/type-reference-node.d.ts +19 -0
- package/dist/_internal/type-reference-node.d.ts.map +1 -0
- package/dist/_internal/type-reference-node.js +14 -0
- package/dist/_internal/type-reference-node.js.map +1 -0
- package/dist/_internal/typed-member-call-rule.d.ts +35 -0
- package/dist/_internal/typed-member-call-rule.d.ts.map +1 -0
- package/dist/_internal/typed-member-call-rule.js +50 -0
- package/dist/_internal/typed-member-call-rule.js.map +1 -0
- package/dist/_internal/typed-path-telemetry.d.ts +58 -0
- package/dist/_internal/typed-path-telemetry.d.ts.map +1 -0
- package/dist/_internal/typed-path-telemetry.js +114 -0
- package/dist/_internal/typed-path-telemetry.js.map +1 -0
- package/dist/_internal/typed-rule.d.ts +142 -0
- package/dist/_internal/typed-rule.d.ts.map +1 -0
- package/dist/_internal/typed-rule.js +197 -0
- package/dist/_internal/typed-rule.js.map +1 -0
- package/dist/_internal/typefest-config-references.d.ts +45 -0
- package/dist/_internal/typefest-config-references.d.ts.map +1 -0
- package/dist/_internal/typefest-config-references.js +98 -0
- package/dist/_internal/typefest-config-references.js.map +1 -0
- package/dist/_internal/typescript-eslint-node-autofix.d.ts +32 -0
- package/dist/_internal/typescript-eslint-node-autofix.d.ts.map +1 -0
- package/dist/_internal/typescript-eslint-node-autofix.js +495 -0
- package/dist/_internal/typescript-eslint-node-autofix.js.map +1 -0
- package/dist/_internal/value-rewrite-autofix-safety.d.ts +33 -0
- package/dist/_internal/value-rewrite-autofix-safety.d.ts.map +1 -0
- package/dist/_internal/value-rewrite-autofix-safety.js +103 -0
- package/dist/_internal/value-rewrite-autofix-safety.js.map +1 -0
- package/dist/plugin.cjs +9718 -0
- package/dist/plugin.cjs.map +7 -0
- package/dist/plugin.d.cts +76 -0
- package/dist/plugin.d.ts +76 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +206 -0
- package/dist/plugin.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-at.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-at.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-at.js +66 -0
- package/dist/rules/prefer-ts-extras-array-at.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-concat.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-concat.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-concat.js +66 -0
- package/dist/rules/prefer-ts-extras-array-concat.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.js +63 -0
- package/dist/rules/prefer-ts-extras-array-find-last-index.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find-last.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find-last.js +66 -0
- package/dist/rules/prefer-ts-extras-array-find-last.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-find.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-find.js +63 -0
- package/dist/rules/prefer-ts-extras-array-find.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-first.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-first.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-first.js +107 -0
- package/dist/rules/prefer-ts-extras-array-first.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-includes.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-includes.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-includes.js +89 -0
- package/dist/rules/prefer-ts-extras-array-includes.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-join.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-array-join.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-join.js +66 -0
- package/dist/rules/prefer-ts-extras-array-join.js.map +1 -0
- package/dist/rules/prefer-ts-extras-array-last.d.ts +8 -0
- package/dist/rules/prefer-ts-extras-array-last.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-array-last.js +132 -0
- package/dist/rules/prefer-ts-extras-array-last.js.map +1 -0
- package/dist/rules/prefer-ts-extras-as-writable.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-as-writable.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-as-writable.js +110 -0
- package/dist/rules/prefer-ts-extras-as-writable.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-defined.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-defined.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-defined.js +182 -0
- package/dist/rules/prefer-ts-extras-assert-defined.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-error.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-error.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-error.js +152 -0
- package/dist/rules/prefer-ts-extras-assert-error.js.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-present.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-present.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-present.js +266 -0
- package/dist/rules/prefer-ts-extras-assert-present.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.js +90 -0
- package/dist/rules/prefer-ts-extras-is-defined-filter.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-defined.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-defined.js +179 -0
- package/dist/rules/prefer-ts-extras-is-defined.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-empty.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-empty.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-empty.js +116 -0
- package/dist/rules/prefer-ts-extras-is-empty.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.js +138 -0
- package/dist/rules/prefer-ts-extras-is-equal-type.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-finite.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-finite.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-finite.js +61 -0
- package/dist/rules/prefer-ts-extras-is-finite.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-infinite.d.ts +8 -0
- package/dist/rules/prefer-ts-extras-is-infinite.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-infinite.js +178 -0
- package/dist/rules/prefer-ts-extras-is-infinite.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-integer.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-integer.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-integer.js +61 -0
- package/dist/rules/prefer-ts-extras-is-integer.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.js +216 -0
- package/dist/rules/prefer-ts-extras-is-present-filter.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-present.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-present.js +217 -0
- package/dist/rules/prefer-ts-extras-is-present.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.js +61 -0
- package/dist/rules/prefer-ts-extras-is-safe-integer.js.map +1 -0
- package/dist/rules/prefer-ts-extras-key-in.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-key-in.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-key-in.js +124 -0
- package/dist/rules/prefer-ts-extras-key-in.js.map +1 -0
- package/dist/rules/prefer-ts-extras-not.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-not.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-not.js +136 -0
- package/dist/rules/prefer-ts-extras-not.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-entries.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-entries.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-entries.js +59 -0
- package/dist/rules/prefer-ts-extras-object-entries.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.js +59 -0
- package/dist/rules/prefer-ts-extras-object-from-entries.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-in.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-has-in.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-in.js +79 -0
- package/dist/rules/prefer-ts-extras-object-has-in.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-own.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-has-own.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-has-own.js +82 -0
- package/dist/rules/prefer-ts-extras-object-has-own.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-keys.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-keys.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-keys.js +59 -0
- package/dist/rules/prefer-ts-extras-object-keys.js.map +1 -0
- package/dist/rules/prefer-ts-extras-object-values.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-object-values.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-object-values.js +59 -0
- package/dist/rules/prefer-ts-extras-object-values.js.map +1 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.js +159 -0
- package/dist/rules/prefer-ts-extras-safe-cast-to.js.map +1 -0
- package/dist/rules/prefer-ts-extras-set-has.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-set-has.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-set-has.js +304 -0
- package/dist/rules/prefer-ts-extras-set-has.js.map +1 -0
- package/dist/rules/prefer-ts-extras-string-split.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-string-split.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-string-split.js +166 -0
- package/dist/rules/prefer-ts-extras-string-split.js.map +1 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.d.ts +13 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.js +65 -0
- package/dist/rules/prefer-type-fest-abstract-constructor.js.map +1 -0
- package/dist/rules/prefer-type-fest-arrayable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-arrayable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-arrayable.js +123 -0
- package/dist/rules/prefer-type-fest-arrayable.js.map +1 -0
- package/dist/rules/prefer-type-fest-async-return-type.d.ts +13 -0
- package/dist/rules/prefer-type-fest-async-return-type.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-async-return-type.js +92 -0
- package/dist/rules/prefer-type-fest-async-return-type.js.map +1 -0
- package/dist/rules/prefer-type-fest-conditional-pick.d.ts +13 -0
- package/dist/rules/prefer-type-fest-conditional-pick.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-conditional-pick.js +74 -0
- package/dist/rules/prefer-type-fest-conditional-pick.js.map +1 -0
- package/dist/rules/prefer-type-fest-constructor.d.ts +13 -0
- package/dist/rules/prefer-type-fest-constructor.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-constructor.js +67 -0
- package/dist/rules/prefer-type-fest-constructor.js.map +1 -0
- package/dist/rules/prefer-type-fest-except.d.ts +13 -0
- package/dist/rules/prefer-type-fest-except.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-except.js +105 -0
- package/dist/rules/prefer-type-fest-except.js.map +1 -0
- package/dist/rules/prefer-type-fest-if.d.ts +13 -0
- package/dist/rules/prefer-type-fest-if.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-if.js +79 -0
- package/dist/rules/prefer-type-fest-if.js.map +1 -0
- package/dist/rules/prefer-type-fest-iterable-element.d.ts +13 -0
- package/dist/rules/prefer-type-fest-iterable-element.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-iterable-element.js +76 -0
- package/dist/rules/prefer-type-fest-iterable-element.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-array.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-array.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-array.js +164 -0
- package/dist/rules/prefer-type-fest-json-array.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-object.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-object.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-object.js +102 -0
- package/dist/rules/prefer-type-fest-json-object.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-primitive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-primitive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-primitive.js +112 -0
- package/dist/rules/prefer-type-fest-json-primitive.js.map +1 -0
- package/dist/rules/prefer-type-fest-json-value.d.ts +13 -0
- package/dist/rules/prefer-type-fest-json-value.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-json-value.js +109 -0
- package/dist/rules/prefer-type-fest-json-value.js.map +1 -0
- package/dist/rules/prefer-type-fest-keys-of-union.d.ts +13 -0
- package/dist/rules/prefer-type-fest-keys-of-union.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-keys-of-union.js +74 -0
- package/dist/rules/prefer-type-fest-keys-of-union.js.map +1 -0
- package/dist/rules/prefer-type-fest-literal-union.d.ts +13 -0
- package/dist/rules/prefer-type-fest-literal-union.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-literal-union.js +181 -0
- package/dist/rules/prefer-type-fest-literal-union.js.map +1 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.js +63 -0
- package/dist/rules/prefer-type-fest-merge-exclusive.js.map +1 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts +13 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.js +133 -0
- package/dist/rules/prefer-type-fest-non-empty-tuple.js.map +1 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.d.ts +13 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.js +74 -0
- package/dist/rules/prefer-type-fest-omit-index-signature.js.map +1 -0
- package/dist/rules/prefer-type-fest-partial-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-partial-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-partial-deep.js +63 -0
- package/dist/rules/prefer-type-fest-partial-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-primitive.d.ts +13 -0
- package/dist/rules/prefer-type-fest-primitive.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-primitive.js +102 -0
- package/dist/rules/prefer-type-fest-primitive.js.map +1 -0
- package/dist/rules/prefer-type-fest-promisable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-promisable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-promisable.js +167 -0
- package/dist/rules/prefer-type-fest-promisable.js.map +1 -0
- package/dist/rules/prefer-type-fest-readonly-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-readonly-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-readonly-deep.js +63 -0
- package/dist/rules/prefer-type-fest-readonly-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.js +75 -0
- package/dist/rules/prefer-type-fest-require-all-or-none.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.js +74 -0
- package/dist/rules/prefer-type-fest-require-at-least-one.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.js +102 -0
- package/dist/rules/prefer-type-fest-require-exactly-one.js.map +1 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.d.ts +13 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.js +74 -0
- package/dist/rules/prefer-type-fest-require-one-or-none.js.map +1 -0
- package/dist/rules/prefer-type-fest-required-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-required-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-required-deep.js +63 -0
- package/dist/rules/prefer-type-fest-required-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-schema.d.ts +13 -0
- package/dist/rules/prefer-type-fest-schema.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-schema.js +74 -0
- package/dist/rules/prefer-type-fest-schema.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.js +74 -0
- package/dist/rules/prefer-type-fest-set-non-nullable.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-optional.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-optional.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-optional.js +74 -0
- package/dist/rules/prefer-type-fest-set-optional.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-readonly.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-readonly.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-readonly.js +74 -0
- package/dist/rules/prefer-type-fest-set-readonly.js.map +1 -0
- package/dist/rules/prefer-type-fest-set-required.d.ts +13 -0
- package/dist/rules/prefer-type-fest-set-required.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-set-required.js +74 -0
- package/dist/rules/prefer-type-fest-set-required.js.map +1 -0
- package/dist/rules/prefer-type-fest-simplify.d.ts +13 -0
- package/dist/rules/prefer-type-fest-simplify.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-simplify.js +75 -0
- package/dist/rules/prefer-type-fest-simplify.js.map +1 -0
- package/dist/rules/prefer-type-fest-tagged-brands.d.ts +13 -0
- package/dist/rules/prefer-type-fest-tagged-brands.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-tagged-brands.js +174 -0
- package/dist/rules/prefer-type-fest-tagged-brands.js.map +1 -0
- package/dist/rules/prefer-type-fest-tuple-of.d.ts +14 -0
- package/dist/rules/prefer-type-fest-tuple-of.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-tuple-of.js +132 -0
- package/dist/rules/prefer-type-fest-tuple-of.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-array.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-array.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-array.js +111 -0
- package/dist/rules/prefer-type-fest-unknown-array.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-map.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-map.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-map.js +82 -0
- package/dist/rules/prefer-type-fest-unknown-map.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-record.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-record.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-record.js +77 -0
- package/dist/rules/prefer-type-fest-unknown-record.js.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-set.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unknown-set.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unknown-set.js +81 -0
- package/dist/rules/prefer-type-fest-unknown-set.js.map +1 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts +13 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.js +74 -0
- package/dist/rules/prefer-type-fest-unwrap-tagged.js.map +1 -0
- package/dist/rules/prefer-type-fest-value-of.d.ts +13 -0
- package/dist/rules/prefer-type-fest-value-of.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-value-of.js +74 -0
- package/dist/rules/prefer-type-fest-value-of.js.map +1 -0
- package/dist/rules/prefer-type-fest-writable-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-writable-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-writable-deep.js +64 -0
- package/dist/rules/prefer-type-fest-writable-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-writable.d.ts +13 -0
- package/dist/rules/prefer-type-fest-writable.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-writable.js +129 -0
- package/dist/rules/prefer-type-fest-writable.js.map +1 -0
- package/docs/rules/getting-started.md +74 -0
- package/docs/rules/guides/adoption-checklist.md +37 -0
- package/docs/rules/guides/preset-selection-strategy.md +87 -0
- package/docs/rules/guides/rollout-and-fix-safety.md +42 -0
- package/docs/rules/guides/snapshot-testing.md +121 -0
- package/docs/rules/guides/type-aware-linting-readiness.md +105 -0
- package/docs/rules/overview.md +49 -0
- package/docs/rules/prefer-ts-extras-array-at.md +132 -0
- package/docs/rules/prefer-ts-extras-array-concat.md +138 -0
- package/docs/rules/prefer-ts-extras-array-find-last-index.md +108 -0
- package/docs/rules/prefer-ts-extras-array-find-last.md +108 -0
- package/docs/rules/prefer-ts-extras-array-find.md +108 -0
- package/docs/rules/prefer-ts-extras-array-first.md +132 -0
- package/docs/rules/prefer-ts-extras-array-includes.md +135 -0
- package/docs/rules/prefer-ts-extras-array-join.md +132 -0
- package/docs/rules/prefer-ts-extras-array-last.md +132 -0
- package/docs/rules/prefer-ts-extras-as-writable.md +124 -0
- package/docs/rules/prefer-ts-extras-assert-defined.md +140 -0
- package/docs/rules/prefer-ts-extras-assert-error.md +147 -0
- package/docs/rules/prefer-ts-extras-assert-present.md +139 -0
- package/docs/rules/prefer-ts-extras-is-defined-filter.md +125 -0
- package/docs/rules/prefer-ts-extras-is-defined.md +147 -0
- package/docs/rules/prefer-ts-extras-is-empty.md +142 -0
- package/docs/rules/prefer-ts-extras-is-equal-type.md +144 -0
- package/docs/rules/prefer-ts-extras-is-finite.md +116 -0
- package/docs/rules/prefer-ts-extras-is-infinite.md +134 -0
- package/docs/rules/prefer-ts-extras-is-integer.md +116 -0
- package/docs/rules/prefer-ts-extras-is-present-filter.md +125 -0
- package/docs/rules/prefer-ts-extras-is-present.md +143 -0
- package/docs/rules/prefer-ts-extras-is-safe-integer.md +116 -0
- package/docs/rules/prefer-ts-extras-key-in.md +150 -0
- package/docs/rules/prefer-ts-extras-not.md +138 -0
- package/docs/rules/prefer-ts-extras-object-entries.md +130 -0
- package/docs/rules/prefer-ts-extras-object-from-entries.md +131 -0
- package/docs/rules/prefer-ts-extras-object-has-in.md +141 -0
- package/docs/rules/prefer-ts-extras-object-has-own.md +137 -0
- package/docs/rules/prefer-ts-extras-object-keys.md +127 -0
- package/docs/rules/prefer-ts-extras-object-values.md +128 -0
- package/docs/rules/prefer-ts-extras-safe-cast-to.md +130 -0
- package/docs/rules/prefer-ts-extras-set-has.md +203 -0
- package/docs/rules/prefer-ts-extras-string-split.md +133 -0
- package/docs/rules/prefer-type-fest-abstract-constructor.md +87 -0
- package/docs/rules/prefer-type-fest-arrayable.md +127 -0
- package/docs/rules/prefer-type-fest-async-return-type.md +117 -0
- package/docs/rules/prefer-type-fest-conditional-pick.md +140 -0
- package/docs/rules/prefer-type-fest-constructor.md +87 -0
- package/docs/rules/prefer-type-fest-except.md +231 -0
- package/docs/rules/prefer-type-fest-if.md +217 -0
- package/docs/rules/prefer-type-fest-iterable-element.md +170 -0
- package/docs/rules/prefer-type-fest-json-array.md +107 -0
- package/docs/rules/prefer-type-fest-json-object.md +107 -0
- package/docs/rules/prefer-type-fest-json-primitive.md +105 -0
- package/docs/rules/prefer-type-fest-json-value.md +107 -0
- package/docs/rules/prefer-type-fest-keys-of-union.md +139 -0
- package/docs/rules/prefer-type-fest-literal-union.md +118 -0
- package/docs/rules/prefer-type-fest-merge-exclusive.md +118 -0
- package/docs/rules/prefer-type-fest-non-empty-tuple.md +115 -0
- package/docs/rules/prefer-type-fest-omit-index-signature.md +196 -0
- package/docs/rules/prefer-type-fest-partial-deep.md +133 -0
- package/docs/rules/prefer-type-fest-primitive.md +106 -0
- package/docs/rules/prefer-type-fest-promisable.md +246 -0
- package/docs/rules/prefer-type-fest-readonly-deep.md +151 -0
- package/docs/rules/prefer-type-fest-require-all-or-none.md +149 -0
- package/docs/rules/prefer-type-fest-require-at-least-one.md +155 -0
- package/docs/rules/prefer-type-fest-require-exactly-one.md +240 -0
- package/docs/rules/prefer-type-fest-require-one-or-none.md +165 -0
- package/docs/rules/prefer-type-fest-required-deep.md +123 -0
- package/docs/rules/prefer-type-fest-schema.md +161 -0
- package/docs/rules/prefer-type-fest-set-non-nullable.md +145 -0
- package/docs/rules/prefer-type-fest-set-optional.md +133 -0
- package/docs/rules/prefer-type-fest-set-readonly.md +136 -0
- package/docs/rules/prefer-type-fest-set-required.md +140 -0
- package/docs/rules/prefer-type-fest-simplify.md +168 -0
- package/docs/rules/prefer-type-fest-tagged-brands.md +278 -0
- package/docs/rules/prefer-type-fest-tuple-of.md +250 -0
- package/docs/rules/prefer-type-fest-unknown-array.md +126 -0
- package/docs/rules/prefer-type-fest-unknown-map.md +123 -0
- package/docs/rules/prefer-type-fest-unknown-record.md +130 -0
- package/docs/rules/prefer-type-fest-unknown-set.md +123 -0
- package/docs/rules/prefer-type-fest-unwrap-tagged.md +133 -0
- package/docs/rules/prefer-type-fest-value-of.md +121 -0
- package/docs/rules/prefer-type-fest-writable-deep.md +113 -0
- package/docs/rules/prefer-type-fest-writable.md +139 -0
- package/docs/rules/presets/all.md +102 -0
- package/docs/rules/presets/index.md +124 -0
- package/docs/rules/presets/minimal.md +37 -0
- package/docs/rules/presets/recommended-type-checked.md +37 -0
- package/docs/rules/presets/recommended.md +116 -0
- package/docs/rules/presets/strict.md +98 -0
- package/docs/rules/presets/ts-extras-type-guards.md +45 -0
- package/docs/rules/presets/type-fest-types.md +68 -0
- package/package.json +574 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# prefer-ts-extras-object-from-entries
|
|
2
|
+
|
|
3
|
+
Prefer [`objectFromEntries`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-from-entries.ts) from `ts-extras` over `Object.fromEntries(...)`.
|
|
4
|
+
|
|
5
|
+
`objectFromEntries(...)` preserves stronger key/value typing and avoids local casting after entry reconstruction.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `Object.fromEntries(entries)` calls that can be migrated to `objectFromEntries(entries)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `Object.fromEntries(entries)` call sites that can use `objectFromEntries(entries)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `objectFromEntries(entries)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `Object.fromEntries(entries)` call sites when `objectFromEntries(entries)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `Object.fromEntries(entries)` call sites that can use `objectFromEntries(entries)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`objectFromEntries` improves the reconstructed object type when building objects from typed entry tuples.
|
|
24
|
+
|
|
25
|
+
- Reconstructed key/value relationships are preserved more consistently.
|
|
26
|
+
- Follow-up casting after reconstruction is needed less often.
|
|
27
|
+
- Object reconstruction uses one explicit helper across modules.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const statusById = Object.fromEntries(statusEntries);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const statusById = objectFromEntries(statusEntries);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime semantics align with `Object.fromEntries`.
|
|
44
|
+
- Duplicate keys keep the last assigned entry, matching native behavior.
|
|
45
|
+
- Input must still be iterable entry pairs (`[key, value]`).
|
|
46
|
+
- If your entries are already widened to `[string, unknown]`, resulting object types remain broad.
|
|
47
|
+
|
|
48
|
+
## Additional examples
|
|
49
|
+
|
|
50
|
+
### ❌ Incorrect — Additional example
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
const config = Object.fromEntries(entries);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### ✅ Correct — Additional example
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
const config = objectFromEntries(entries);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### ✅ Correct — Repository-wide usage
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
const grouped = objectFromEntries(pairs);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## ESLint flat config example
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import typefest from "eslint-plugin-typefest";
|
|
72
|
+
|
|
73
|
+
export default [
|
|
74
|
+
{
|
|
75
|
+
plugins: { typefest },
|
|
76
|
+
rules: {
|
|
77
|
+
"typefest/prefer-ts-extras-object-from-entries": "error",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## When not to use it
|
|
84
|
+
|
|
85
|
+
Disable this rule if you must keep direct `Object.fromEntries` calls for interop or platform constraints.
|
|
86
|
+
|
|
87
|
+
## Package documentation
|
|
88
|
+
|
|
89
|
+
ts-extras package documentation:
|
|
90
|
+
|
|
91
|
+
Source file: [`source/object-from-entries.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-from-entries.ts)
|
|
92
|
+
|
|
93
|
+
````ts
|
|
94
|
+
/**
|
|
95
|
+
A strongly-typed version of `Object.fromEntries()`.
|
|
96
|
+
|
|
97
|
+
This is useful since `Object.fromEntries()` always returns `{[key: string]: T}`. This function returns a strongly-typed object from the given array of entries.
|
|
98
|
+
|
|
99
|
+
- [TypeScript issues about this](https://github.com/microsoft/TypeScript/issues/35745)
|
|
100
|
+
|
|
101
|
+
@example
|
|
102
|
+
```
|
|
103
|
+
import {objectFromEntries} from 'ts-extras';
|
|
104
|
+
|
|
105
|
+
const stronglyTypedObjectFromEntries = objectFromEntries([
|
|
106
|
+
['a', 123],
|
|
107
|
+
['b', 'someString'],
|
|
108
|
+
['c', true],
|
|
109
|
+
]);
|
|
110
|
+
//=> {a: number; b: string; c: boolean}
|
|
111
|
+
|
|
112
|
+
const untypedEntries = Object.fromEntries([['a', 123], ['b', 'someString'], ['c', true]]);
|
|
113
|
+
//=> {[key: string]: unknown}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
@category Improved builtin
|
|
117
|
+
*/
|
|
118
|
+
````
|
|
119
|
+
|
|
120
|
+
> **Rule catalog ID:** R027
|
|
121
|
+
|
|
122
|
+
## Further reading
|
|
123
|
+
|
|
124
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
125
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
126
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
127
|
+
|
|
128
|
+
## Adoption resources
|
|
129
|
+
|
|
130
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
131
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# prefer-ts-extras-object-has-in
|
|
2
|
+
|
|
3
|
+
Require [`objectHasIn`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-has-in.ts) from `ts-extras` over `Reflect.has()`.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule only matches direct `Reflect.has(object, key)` calls where both arguments can be forwarded unchanged to `objectHasIn(object, key)`.
|
|
8
|
+
|
|
9
|
+
- `Reflect.has(object, key)` calls.
|
|
10
|
+
|
|
11
|
+
Syntactically similar alternatives are intentionally out of scope unless they preserve the same AST shape.
|
|
12
|
+
|
|
13
|
+
## What this rule reports
|
|
14
|
+
|
|
15
|
+
This rule reports `Reflect.has(object, key)` calls that can be replaced with `objectHasIn(object, key)`.
|
|
16
|
+
|
|
17
|
+
- `Reflect.has(object, key)` calls.
|
|
18
|
+
|
|
19
|
+
## Why this rule exists
|
|
20
|
+
|
|
21
|
+
`objectHasIn()` provides stronger TypeScript narrowing for key-existence checks while preserving inherited-property semantics.
|
|
22
|
+
|
|
23
|
+
- Use this when inherited members should count as present.
|
|
24
|
+
- Reduces cast-heavy follow-up property access.
|
|
25
|
+
- Keeps prototype-aware checks consistent across modules.
|
|
26
|
+
|
|
27
|
+
## ❌ Incorrect
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
if (Reflect.has(record, key)) {
|
|
31
|
+
console.log(record[key as keyof typeof record]);
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
if (objectHasIn(record, key)) {
|
|
39
|
+
console.log(record[key]);
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Behavior and migration notes
|
|
44
|
+
|
|
45
|
+
- Runtime semantics align with `Reflect.has` and `key in object` (prototype chain included).
|
|
46
|
+
- Prefer `objectHasOwn` if inherited members should be excluded.
|
|
47
|
+
- For security-sensitive payload validation, confirm that inherited properties are acceptable.
|
|
48
|
+
|
|
49
|
+
## Additional examples
|
|
50
|
+
|
|
51
|
+
### ❌ Incorrect — Additional example
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
if (Reflect.has(input, "name")) {
|
|
55
|
+
console.log((input as { name: unknown }).name);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### ✅ Correct — Additional example
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
if (objectHasIn(input, "name")) {
|
|
63
|
+
console.log(input.name);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### ✅ Correct — Repository-wide usage
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const canAccess = objectHasIn(candidate, key);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## ESLint flat config example
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import typefest from "eslint-plugin-typefest";
|
|
77
|
+
|
|
78
|
+
export default [
|
|
79
|
+
{
|
|
80
|
+
plugins: { typefest },
|
|
81
|
+
rules: {
|
|
82
|
+
"typefest/prefer-ts-extras-object-has-in": "error",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## When not to use it
|
|
89
|
+
|
|
90
|
+
Disable this rule if checks must be own-property-only, or if runtime helper dependencies are disallowed in your environment.
|
|
91
|
+
|
|
92
|
+
## Package documentation
|
|
93
|
+
|
|
94
|
+
ts-extras package documentation:
|
|
95
|
+
|
|
96
|
+
Source file: [`source/object-has-in.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-has-in.ts)
|
|
97
|
+
|
|
98
|
+
````ts
|
|
99
|
+
/**
|
|
100
|
+
Check if an object has a property (including inherited) and narrow the object type.
|
|
101
|
+
|
|
102
|
+
This function performs __object narrowing__ - it adds the checked property to the object's type, allowing safe property access. Uses the `in` operator to check the entire prototype chain.
|
|
103
|
+
|
|
104
|
+
Unlike `objectHasOwn` (own properties only) and `keyIn` (key narrowing), this narrows the _object_ type to include inherited properties.
|
|
105
|
+
|
|
106
|
+
@example
|
|
107
|
+
```
|
|
108
|
+
import {objectHasIn} from 'ts-extras';
|
|
109
|
+
|
|
110
|
+
const data: unknown = {foo: 1};
|
|
111
|
+
|
|
112
|
+
if (objectHasIn(data, 'foo')) {
|
|
113
|
+
// `data` is now: unknown & {foo: unknown}
|
|
114
|
+
console.log(data.foo); // Safe access
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Also checks prototype chain
|
|
118
|
+
if (objectHasIn(data, 'toString')) {
|
|
119
|
+
// `data` is now: unknown & {toString: unknown}
|
|
120
|
+
console.log(data.toString); // Safe access to inherited method
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
@note This uses the `in` operator and checks the entire prototype chain, but blocks `__proto__` and `constructor` for security.
|
|
125
|
+
|
|
126
|
+
@category Type guard
|
|
127
|
+
*/
|
|
128
|
+
````
|
|
129
|
+
|
|
130
|
+
> **Rule catalog ID:** R028
|
|
131
|
+
|
|
132
|
+
## Further reading
|
|
133
|
+
|
|
134
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
135
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
136
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
137
|
+
|
|
138
|
+
## Adoption resources
|
|
139
|
+
|
|
140
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
141
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# prefer-ts-extras-object-has-own
|
|
2
|
+
|
|
3
|
+
Require [`objectHasOwn`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-has-own.ts) from `ts-extras` over `Object.hasOwn` when checking own properties.
|
|
4
|
+
|
|
5
|
+
## Targeted pattern scope
|
|
6
|
+
|
|
7
|
+
This rule only matches direct `Object.hasOwn(object, key)` calls where both arguments can be forwarded unchanged to `objectHasOwn(object, key)`.
|
|
8
|
+
|
|
9
|
+
- Calls to `Object.hasOwn(...)` in runtime source files and typed rule fixtures.
|
|
10
|
+
|
|
11
|
+
Syntactically similar alternatives are intentionally out of scope unless they preserve the same AST shape.
|
|
12
|
+
|
|
13
|
+
## What this rule reports
|
|
14
|
+
|
|
15
|
+
This rule reports `Object.hasOwn(object, key)` calls that can be replaced with `objectHasOwn(object, key)`.
|
|
16
|
+
|
|
17
|
+
- Calls to `Object.hasOwn(...)` in runtime source files and typed rule fixtures.
|
|
18
|
+
|
|
19
|
+
## Why this rule exists
|
|
20
|
+
|
|
21
|
+
`objectHasOwn` is a type guard that narrows the object to include the checked property. This makes downstream access safer and reduces manual casts after own-property checks.
|
|
22
|
+
|
|
23
|
+
- Prefer this when you only want **own** properties.
|
|
24
|
+
- Avoids repetitive `(obj as { prop: ... }).prop` casts after checks.
|
|
25
|
+
- Makes guard intent explicit for reviewers.
|
|
26
|
+
|
|
27
|
+
## ❌ Incorrect
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
if (Object.hasOwn(record, key)) {
|
|
31
|
+
console.log(record[key as keyof typeof record]);
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
if (objectHasOwn(record, key)) {
|
|
39
|
+
console.log(record[key]);
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Behavior and migration notes
|
|
44
|
+
|
|
45
|
+
- Runtime semantics align with `Object.hasOwn` (prototype chain is **not** considered).
|
|
46
|
+
- Useful for untrusted inputs where inherited members should not count.
|
|
47
|
+
- If your current code uses `Reflect.has` or `in`, confirm that own-only checks are acceptable before migration.
|
|
48
|
+
|
|
49
|
+
## Additional examples
|
|
50
|
+
|
|
51
|
+
### ❌ Incorrect — Additional example
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
if (Object.hasOwn(data, "id")) {
|
|
55
|
+
console.log((data as { id: unknown }).id);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### ✅ Correct — Additional example
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
if (objectHasOwn(data, "id")) {
|
|
63
|
+
console.log(data.id);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### ✅ Correct — Repository-wide usage
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const isOwn = objectHasOwn(record, field);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## ESLint flat config example
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import typefest from "eslint-plugin-typefest";
|
|
77
|
+
|
|
78
|
+
export default [
|
|
79
|
+
{
|
|
80
|
+
plugins: { typefest },
|
|
81
|
+
rules: {
|
|
82
|
+
"typefest/prefer-ts-extras-object-has-own": "error",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## When not to use it
|
|
89
|
+
|
|
90
|
+
Disable this rule if you intentionally rely on prototype-chain checks (`in`/`Reflect.has`) or if runtime helper dependencies are disallowed in your environment.
|
|
91
|
+
|
|
92
|
+
## Package documentation
|
|
93
|
+
|
|
94
|
+
ts-extras package documentation:
|
|
95
|
+
|
|
96
|
+
Source file: [`source/object-has-own.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-has-own.ts)
|
|
97
|
+
|
|
98
|
+
````ts
|
|
99
|
+
/**
|
|
100
|
+
A strongly-typed version of `Object.hasOwn()` that narrows the object type.
|
|
101
|
+
|
|
102
|
+
This function performs __object narrowing__ for own properties only - it adds the checked property to the object's type, allowing safe property access. Does not check the prototype chain.
|
|
103
|
+
|
|
104
|
+
Unlike `objectHasIn` (includes inherited) and `keyIn` (key narrowing), this narrows the _object_ type to include only own properties.
|
|
105
|
+
|
|
106
|
+
@example
|
|
107
|
+
```
|
|
108
|
+
import {objectHasOwn} from 'ts-extras';
|
|
109
|
+
|
|
110
|
+
const data: unknown = {foo: 1};
|
|
111
|
+
|
|
112
|
+
if (objectHasOwn(data, 'foo')) {
|
|
113
|
+
// `data` is now: unknown & {foo: unknown}
|
|
114
|
+
console.log(data.foo); // Safe access to own property
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
objectHasOwn({}, 'toString');
|
|
118
|
+
//=> false (inherited property, not own)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
@category Improved builtin
|
|
122
|
+
@category Type guard
|
|
123
|
+
*/
|
|
124
|
+
````
|
|
125
|
+
|
|
126
|
+
> **Rule catalog ID:** R029
|
|
127
|
+
|
|
128
|
+
## Further reading
|
|
129
|
+
|
|
130
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
131
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
132
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
133
|
+
|
|
134
|
+
## Adoption resources
|
|
135
|
+
|
|
136
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
137
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# prefer-ts-extras-object-keys
|
|
2
|
+
|
|
3
|
+
Prefer [`objectKeys`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-keys.ts) from `ts-extras` over `Object.keys(...)`.
|
|
4
|
+
|
|
5
|
+
`objectKeys(...)` preserves stronger key typing and avoids repeated casts in iteration paths.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `Object.keys(value)` calls that can be migrated to `objectKeys(value)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `Object.keys(value)` call sites that can use `objectKeys(value)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `objectKeys(value)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `Object.keys(value)` call sites when `objectKeys(value)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `Object.keys(value)` call sites that can use `objectKeys(value)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`objectKeys` improves key typing for indexed access and iteration paths.
|
|
24
|
+
|
|
25
|
+
- Fewer `as Array<keyof T>` casts in loops.
|
|
26
|
+
- Safer indexed reads after key iteration.
|
|
27
|
+
- One canonical helper for key iteration patterns.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const keys = Object.keys(monitorConfig);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const keys = objectKeys(monitorConfig);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime semantics align with `Object.keys` (own enumerable string keys only).
|
|
44
|
+
- Symbol keys are excluded, same as native behavior.
|
|
45
|
+
- Numeric keys are still returned as strings, matching native output.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const keys = Object.keys(model);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### ✅ Correct — Additional example
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const keys = objectKeys(model);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### ✅ Correct — Repository-wide usage
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
for (const key of objectKeys(theme)) {
|
|
65
|
+
void key;
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## ESLint flat config example
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import typefest from "eslint-plugin-typefest";
|
|
73
|
+
|
|
74
|
+
export default [
|
|
75
|
+
{
|
|
76
|
+
plugins: { typefest },
|
|
77
|
+
rules: {
|
|
78
|
+
"typefest/prefer-ts-extras-object-keys": "error",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## When not to use it
|
|
85
|
+
|
|
86
|
+
Disable this rule if you must keep direct `Object.keys` calls for interop constraints.
|
|
87
|
+
|
|
88
|
+
## Package documentation
|
|
89
|
+
|
|
90
|
+
ts-extras package documentation:
|
|
91
|
+
|
|
92
|
+
Source file: [`source/object-keys.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-keys.ts)
|
|
93
|
+
|
|
94
|
+
````ts
|
|
95
|
+
/**
|
|
96
|
+
A strongly-typed version of `Object.keys()`.
|
|
97
|
+
|
|
98
|
+
This is useful since `Object.keys()` always returns an array of strings. This function returns a strongly-typed array of the keys of the given object.
|
|
99
|
+
|
|
100
|
+
- [Explanation](https://stackoverflow.com/questions/55012174/why-doesnt-object-keys-return-a-keyof-type-in-typescript)
|
|
101
|
+
- [TypeScript issues about this](https://github.com/microsoft/TypeScript/issues/45390)
|
|
102
|
+
|
|
103
|
+
@example
|
|
104
|
+
```
|
|
105
|
+
import {objectKeys} from 'ts-extras';
|
|
106
|
+
|
|
107
|
+
const stronglyTypedItems = objectKeys({a: 1, b: 2, c: 3}); // => Array<'a' | 'b' | 'c'>
|
|
108
|
+
const untypedItems = Object.keys({a: 1, b: 2, c: 3}); // => Array<string>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
@category Improved builtin
|
|
112
|
+
@category Type guard
|
|
113
|
+
*/
|
|
114
|
+
````
|
|
115
|
+
|
|
116
|
+
> **Rule catalog ID:** R030
|
|
117
|
+
|
|
118
|
+
## Further reading
|
|
119
|
+
|
|
120
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
121
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
122
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
123
|
+
|
|
124
|
+
## Adoption resources
|
|
125
|
+
|
|
126
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
127
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# prefer-ts-extras-object-values
|
|
2
|
+
|
|
3
|
+
Prefer [`objectValues`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-values.ts) from `ts-extras` over `Object.values(...)`.
|
|
4
|
+
|
|
5
|
+
`objectValues(...)` preserves stronger value typing and keeps value iteration contracts explicit.
|
|
6
|
+
|
|
7
|
+
## Targeted pattern scope
|
|
8
|
+
|
|
9
|
+
This rule focuses on direct `Object.values(value)` calls that can be migrated to `objectValues(value)` with deterministic fixes.
|
|
10
|
+
|
|
11
|
+
- `Object.values(value)` call sites that can use `objectValues(value)`.
|
|
12
|
+
|
|
13
|
+
Alias indirection, wrapper helpers, and non-canonical call shapes are excluded to keep `objectValues(value)` migrations safe.
|
|
14
|
+
|
|
15
|
+
## What this rule reports
|
|
16
|
+
|
|
17
|
+
This rule reports `Object.values(value)` call sites when `objectValues(value)` is the intended replacement.
|
|
18
|
+
|
|
19
|
+
- `Object.values(value)` call sites that can use `objectValues(value)`.
|
|
20
|
+
|
|
21
|
+
## Why this rule exists
|
|
22
|
+
|
|
23
|
+
`objectValues` improves value typing during iteration and post-processing.
|
|
24
|
+
|
|
25
|
+
- Value unions are preserved more consistently.
|
|
26
|
+
- Downstream map/filter code needs fewer local casts.
|
|
27
|
+
- Value extraction style stays consistent across modules.
|
|
28
|
+
|
|
29
|
+
## ❌ Incorrect
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const values = Object.values(siteStateMap);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## ✅ Correct
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
const values = objectValues(siteStateMap);
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Behavior and migration notes
|
|
42
|
+
|
|
43
|
+
- Runtime semantics align with `Object.values` (own enumerable string-keyed values).
|
|
44
|
+
- Symbol-keyed values remain excluded, matching native behavior.
|
|
45
|
+
- For broadly typed records, resulting value types remain broad.
|
|
46
|
+
|
|
47
|
+
## Additional examples
|
|
48
|
+
|
|
49
|
+
### ❌ Incorrect — Additional example
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const values = Object.values(features);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### ✅ Correct — Additional example
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const values = objectValues(features);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### ✅ Correct — Repository-wide usage
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
const labels = objectValues(enumLikeObject);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## ESLint flat config example
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import typefest from "eslint-plugin-typefest";
|
|
71
|
+
|
|
72
|
+
export default [
|
|
73
|
+
{
|
|
74
|
+
plugins: { typefest },
|
|
75
|
+
rules: {
|
|
76
|
+
"typefest/prefer-ts-extras-object-values": "error",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## When not to use it
|
|
83
|
+
|
|
84
|
+
Disable this rule if direct `Object.values` calls are required for interop constraints.
|
|
85
|
+
|
|
86
|
+
## Package documentation
|
|
87
|
+
|
|
88
|
+
ts-extras package documentation:
|
|
89
|
+
|
|
90
|
+
Source file: [`source/object-values.ts`](https://github.com/sindresorhus/ts-extras/blob/main/source/object-values.ts)
|
|
91
|
+
|
|
92
|
+
````ts
|
|
93
|
+
/**
|
|
94
|
+
A strongly-typed version of `Object.values()`.
|
|
95
|
+
|
|
96
|
+
This is useful since `Object.values()` always returns `T[]`. This function returns a strongly-typed array of the values of the given object.
|
|
97
|
+
|
|
98
|
+
- [TypeScript issues about this](https://github.com/microsoft/TypeScript/pull/12253)
|
|
99
|
+
|
|
100
|
+
@example
|
|
101
|
+
```
|
|
102
|
+
import {objectValues} from 'ts-extras';
|
|
103
|
+
|
|
104
|
+
const object: {a: number; b?: string} = {a: 1, b: 'hello'};
|
|
105
|
+
|
|
106
|
+
const stronglyTypedValues = objectValues(object);
|
|
107
|
+
//=> Array<number | string>
|
|
108
|
+
|
|
109
|
+
const untypedValues = Object.values(object);
|
|
110
|
+
//=> Array<string | number | undefined>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
@category Improved builtin
|
|
114
|
+
*/
|
|
115
|
+
````
|
|
116
|
+
|
|
117
|
+
> **Rule catalog ID:** R031
|
|
118
|
+
|
|
119
|
+
## Further reading
|
|
120
|
+
|
|
121
|
+
- [`ts-extras` README](https://github.com/sindresorhus/ts-extras)
|
|
122
|
+
- [`ts-extras` package reference](https://www.npmjs.com/package/ts-extras)
|
|
123
|
+
- [TypeScript Handbook: Narrowing](https://www.typescriptlang.org/docs/handbook/2/narrowing.html)
|
|
124
|
+
|
|
125
|
+
## Adoption resources
|
|
126
|
+
|
|
127
|
+
- [Rule adoption checklist](./guides/adoption-checklist.md)
|
|
128
|
+
- [Rollout and fix safety](./guides/rollout-and-fix-safety.md)
|