diff --git a/src/services/jsDoc.ts b/src/services/jsDoc.ts index 257531c14e8d9..a8d4c1a4e03fd 100644 --- a/src/services/jsDoc.ts +++ b/src/services/jsDoc.ts @@ -439,12 +439,18 @@ namespace ts.JsDoc { case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.PropertySignature: case SyntaxKind.EnumDeclaration: case SyntaxKind.EnumMember: case SyntaxKind.TypeAliasDeclaration: return { commentOwner }; + case SyntaxKind.PropertySignature: { + const host = commentOwner as PropertySignature; + return host.type && isFunctionTypeNode(host.type) + ? { commentOwner, parameters: host.type.parameters, hasReturn: hasReturn(host.type, options) } + : { commentOwner }; + } + case SyntaxKind.VariableStatement: { const varStatement = commentOwner as VariableStatement; const varDeclarations = varStatement.declarationList.declarations; @@ -486,7 +492,7 @@ namespace ts.JsDoc { function hasReturn(node: Node, options: DocCommentTemplateOptions | undefined) { return !!options?.generateReturnInDocTemplate && - (isArrowFunction(node) && isExpression(node.body) + (isFunctionTypeNode(node) || isArrowFunction(node) && isExpression(node.body) || isFunctionLikeDeclaration(node) && node.body && isBlock(node.body) && !!forEachReturnStatement(node.body, n => n)); } diff --git a/tests/cases/fourslash/docCommentTemplateInterfacePropertyFunctionType.ts b/tests/cases/fourslash/docCommentTemplateInterfacePropertyFunctionType.ts new file mode 100644 index 0000000000000..d14274800e61c --- /dev/null +++ b/tests/cases/fourslash/docCommentTemplateInterfacePropertyFunctionType.ts @@ -0,0 +1,21 @@ +/// + +////interface I { +//// /**/ +//// foo: (a: number, b: string) => void; +////} + +verify.docCommentTemplateAt("", 12, + `/** + * + * @param a + * @param b + * @returns + */`); + +verify.docCommentTemplateAt("", 12, + `/** + * + * @param a + * @param b + */`, { generateReturnInDocTemplate: false });