diff --git a/packages/eslint-plugin/src/rules/no-unsafe-return.ts b/packages/eslint-plugin/src/rules/no-unsafe-return.ts index e5fb73a3ac9..3334c9f3c32 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-return.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-return.ts @@ -104,7 +104,13 @@ export default createRule({ // function return type, we shouldn't complain (it's intentional, even if unsafe) if (functionTSNode.type) { for (const signature of functionType.getCallSignatures()) { - if (returnNodeType === signature.getReturnType()) { + if ( + returnNodeType === signature.getReturnType() || + util.isTypeFlagSet( + signature.getReturnType(), + ts.TypeFlags.Any | ts.TypeFlags.Unknown, + ) + ) { return; } } diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts index b75cdfb28c0..42a798ffe11 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts @@ -108,6 +108,17 @@ function foo(): Set { return new Map(); } `, + // https://github.com/typescript-eslint/typescript-eslint/issues/3549 + ` + function foo(): any { + return [] as any[]; + } + `, + ` + function foo(): unknown { + return [] as any[]; + } + `, ], invalid: [ {