diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index 25eac2adbc6..c7caf2d4bef 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -108,6 +108,7 @@ export default util.createRule({ case AST_NODE_TYPES.MemberExpression: case AST_NODE_TYPES.Identifier: + case AST_NODE_TYPES.ConditionalExpression: return isFunctionType(node); case AST_NODE_TYPES.CallExpression: 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 a9867d73018..de619abbc8b 100644 --- a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts +++ b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts @@ -251,6 +251,12 @@ const foo = (callback: Function) => { setTimeout(callback, 0); }; `, + ` +const foo = () => {}; +const bar = () => {}; + +setTimeout(Math.radom() > 0.5 ? foo : bar, 0); + `, ], invalid: [ @@ -606,6 +612,21 @@ const fn = (foo: string | any) => { }, { code: ` +const foo = 'foo'; +const bar = () => {}; + +setTimeout(Math.radom() > 0.5 ? foo : bar, 0); + `, + errors: [ + { + messageId: 'noImpliedEvalError', + line: 5, + column: 12, + }, + ], + }, + { + code: ` window.setTimeout(\`\`, 0); window['setTimeout'](\`\`, 0);