diff --git a/packages/eslint-plugin/src/rules/unbound-method.ts b/packages/eslint-plugin/src/rules/unbound-method.ts index c76ac76f9d0..8be7a842c46 100644 --- a/packages/eslint-plugin/src/rules/unbound-method.ts +++ b/packages/eslint-plugin/src/rules/unbound-method.ts @@ -120,6 +120,9 @@ function isSafeUse(node: TSESTree.Node): boolean { case AST_NODE_TYPES.TaggedTemplateExpression: return parent.tag === node; + case AST_NODE_TYPES.UnaryExpression: + return parent.operator === 'typeof'; + case AST_NODE_TYPES.TSNonNullExpression: case AST_NODE_TYPES.TSAsExpression: case AST_NODE_TYPES.TSTypeAssertion: diff --git a/packages/eslint-plugin/tests/rules/unbound-method.test.ts b/packages/eslint-plugin/tests/rules/unbound-method.test.ts index 061b4edf524..2c0d1aaf188 100644 --- a/packages/eslint-plugin/tests/rules/unbound-method.test.ts +++ b/packages/eslint-plugin/tests/rules/unbound-method.test.ts @@ -97,6 +97,12 @@ instane.boundStatic && 0; ContainsMethods.boundStatic ? 1 : 0; ContainsMethods.unboundStatic ? 1 : 0; + +typeof instance.bound === 'function'; +typeof instance.unbound === 'function'; + +typeof ContainsMethods.boundStatic === 'function'; +typeof ContainsMethods.unboundStatic === 'function'; `, `interface RecordA { readonly type: "A"