diff --git a/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.rule.ts b/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.rule.ts index c68d5eea05..cb6371aa08 100644 --- a/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.rule.ts +++ b/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.rule.ts @@ -59,6 +59,13 @@ export const rule = createRule({ let queryKeyNode = queryKey.value + if ( + queryKeyNode.type === AST_NODE_TYPES.TSAsExpression && + queryKeyNode.expression.type === AST_NODE_TYPES.ArrayExpression + ) { + queryKeyNode = queryKeyNode.expression + } + if (queryKeyNode.type === AST_NODE_TYPES.Identifier) { const expression = ASTUtils.getReferencedExpressionByIdentifier({ context, @@ -80,7 +87,7 @@ export const rule = createRule({ const relevantRefs = refs.filter((ref) => { return ( ref.identifier.name !== 'undefined' && - ref.resolved?.defs.every((def) => def.type !== 'ClassName') + ref.identifier.parent?.type !== AST_NODE_TYPES.NewExpression ) }) diff --git a/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.test.ts b/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.test.ts index b7cb0b6572..7b0a4ed033 100644 --- a/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.test.ts +++ b/packages/eslint-plugin-query/src/rules/exhaustive-deps/exhaustive-deps.test.ts @@ -216,6 +216,26 @@ ruleTester.run('exhaustive-deps', rule, { }) `, }, + { + name: 'should not treat new Error as missing dependency', + code: normalizeIndent` + useQuery({ + queryKey: ['foo'], + queryFn: () => Promise.reject(new Error('1')), + }) + `, + }, + { + name: 'should see id when there is a const assertion', + code: normalizeIndent` + const useX = (id: number) => { + return useQuery({ + queryKey: ['foo', id] as const, + queryFn: async () => id, + }) + } + `, + }, ], invalid: [ {