diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index afda630b6b6..1e063847da3 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -80,6 +80,16 @@ export default util.createRule({ return true; } + if (symbol && symbol.escapedName === FUNCTION_CONSTRUCTOR) { + const declarations = symbol.getDeclarations() ?? []; + for (const declaration of declarations) { + const sourceFile = declaration.getSourceFile(); + if (program.isSourceFileDefaultLibrary(sourceFile)) { + return true; + } + } + } + const signatures = checker.getSignaturesOfType( type, ts.SignatureKind.Call, diff --git a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts index f5ceba4fe94..a9867d73018 100644 --- a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts +++ b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts @@ -246,6 +246,11 @@ const fn = (foo: () => void) => { import { Function } from './class'; new Function('foo'); `, + ` +const foo = (callback: Function) => { + setTimeout(callback, 0); +}; + `, ], invalid: [