diff --git a/packages/eslint-plugin/src/rules/no-array-delete.ts b/packages/eslint-plugin/src/rules/no-array-delete.ts index a179418a7b01..df49a7d8bce2 100644 --- a/packages/eslint-plugin/src/rules/no-array-delete.ts +++ b/packages/eslint-plugin/src/rules/no-array-delete.ts @@ -3,11 +3,7 @@ import type * as ts from 'typescript'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; -import { - createRule, - getConstrainedTypeAtLocation, - getParserServices, -} from '../util'; +import { createRule, getConstraintInfo, getParserServices } from '../util'; type MessageId = 'noArrayDelete' | 'useSplice'; @@ -58,9 +54,16 @@ export default createRule<[], MessageId>({ return; } - const type = getConstrainedTypeAtLocation(services, argument.object); + const { constraintType } = getConstraintInfo( + checker, + services.getTypeAtLocation(argument.object), + ); - if (!isUnderlyingTypeArray(type)) { + if (constraintType == null) { + return; + } + + if (!isUnderlyingTypeArray(constraintType)) { return; } diff --git a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts index 47921179ee22..6be8d78bb62a 100644 --- a/packages/eslint-plugin/tests/rules/no-array-delete.test.ts +++ b/packages/eslint-plugin/tests/rules/no-array-delete.test.ts @@ -55,6 +55,11 @@ ruleTester.run('no-array-delete', rule, { declare const test: never; delete test[0]; `, + ` + function f(input: T) { + delete input[0]; + } + `, ], invalid: [