diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 9c255b6f9f50..af8bd281da51 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -558,12 +558,12 @@ export default createRule({ // collect overloads MethodDefinition(node): void { - if (!node.value.body) { + if (!node.value.body && !isGetterOrSetter(node)) { addOverload(node); } }, TSAbstractMethodDefinition(node): void { - if (!node.value.body) { + if (!node.value.body && !isGetterOrSetter(node)) { addOverload(node); } }, @@ -573,7 +573,11 @@ export default createRule({ const exportingNode = getExportingNode(node); addOverload(node, node.id?.name ?? exportingNode?.type, exportingNode); }, - TSMethodSignature: addOverload, + TSMethodSignature(node): void { + if (!isGetterOrSetter(node)) { + addOverload(node); + } + }, // validate scopes 'ClassDeclaration:exit': checkScope, @@ -634,3 +638,12 @@ function getStaticParameterName(param: TSESTree.Node): string | undefined { function isIdentifier(node: TSESTree.Node): node is TSESTree.Identifier { return node.type === AST_NODE_TYPES.Identifier; } + +function isGetterOrSetter( + node: + | TSESTree.MethodDefinition + | TSESTree.TSAbstractMethodDefinition + | TSESTree.TSMethodSignature, +): boolean { + return node.kind === 'get' || node.kind === 'set'; +} diff --git a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts index 0e5ee9219ce7..f88ba1e89fd8 100644 --- a/packages/eslint-plugin/tests/rules/unified-signatures.test.ts +++ b/packages/eslint-plugin/tests/rules/unified-signatures.test.ts @@ -158,6 +158,24 @@ function rest(...xs: number[]): Promise; function rest(xs: number[], y: string): Promise; async function rest(...args: any[], y?: string): Promise { return y || args; +} + `, + ` +declare class Foo { + get bar(); + set bar(x: number); +} + `, + ` +interface Foo { + get bar(); + set bar(x: number); +} + `, + ` +abstract class Foo { + abstract get bar(); + abstract set bar(a: unknown); } `, {