diff --git a/packages/eslint-plugin/src/rules/promise-function-async.ts b/packages/eslint-plugin/src/rules/promise-function-async.ts index 885580c493fa..78854f58bfaa 100644 --- a/packages/eslint-plugin/src/rules/promise-function-async.ts +++ b/packages/eslint-plugin/src/rules/promise-function-async.ts @@ -1,3 +1,5 @@ +import ts from 'typescript'; +import { isTypeFlagSet } from 'tsutils'; import { TSESTree } from '@typescript-eslint/experimental-utils'; import * as util from '../util'; @@ -90,6 +92,9 @@ export default util.createRule({ } const returnType = checker.getReturnTypeOfSignature(signatures[0]); + if (isTypeFlagSet(returnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) { + return; + } if (!util.containsTypeByName(returnType, allAllowedPromiseNames)) { return; } diff --git a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts index 3910cea56042..4da2cf4109d8 100644 --- a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts +++ b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts @@ -16,6 +16,16 @@ const ruleTester = new RuleTester({ ruleTester.run('promise-function-async', rule, { valid: [ ` +function returnsAny(): any { + return 1; +} + `, + ` +function returnsUnknown(): unknown { + return 1; +} + `, + ` const nonAsyncNonPromiseArrowFunction = (n: number) => n; `, `