diff --git a/docs/dgeni-package/mocks/readTypeScriptModules/interfaces.ts b/docs/dgeni-package/mocks/readTypeScriptModules/interfaces.ts index 121f15761b..7a0de50548 100644 --- a/docs/dgeni-package/mocks/readTypeScriptModules/interfaces.ts +++ b/docs/dgeni-package/mocks/readTypeScriptModules/interfaces.ts @@ -1,4 +1,5 @@ export interface MyInterface { - optionalProperty? : string, + optionalProperty? : string (param: string) : string + new (param: number) : MyInterface } \ No newline at end of file diff --git a/docs/dgeni-package/processors/readTypeScriptModules.js b/docs/dgeni-package/processors/readTypeScriptModules.js index dc2ca531f6..2f749f8167 100644 --- a/docs/dgeni-package/processors/readTypeScriptModules.js +++ b/docs/dgeni-package/processors/readTypeScriptModules.js @@ -83,6 +83,12 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo } else if (!hidePrivateMembers || memberSymbol.name.charAt(0) !== '_') { docs.push(memberDoc); exportDoc.members.push(memberDoc); + } else if (memberSymbol.name === '__call' && memberSymbol.flags & ts.SymbolFlags.Signature) { + docs.push(memberDoc); + exportDoc.callMember = memberDoc; + } else if (memberSymbol.name === '__new' && memberSymbol.flags & ts.SymbolFlags.Signature) { + docs.push(memberDoc); + exportDoc.newMember = memberDoc; } } @@ -196,7 +202,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo location: getLocation(memberSymbol) }; - if (memberSymbol.flags & ts.SymbolFlags.Method) { + if (memberSymbol.flags & (ts.SymbolFlags.Method | ts.SymbolFlags.Signature)) { // NOTE: we use the property name `parameters` here so we don't conflict // with the `params` property that will be updated by dgeni reading the // `@param` tags from the docs @@ -208,7 +214,7 @@ module.exports = function readTypeScriptModules(tsParser, readFilesProcessor, mo memberDoc.name = 'constructor'; } - if(memberSymbol.flags & ts.SymbolFlags.Value) { + if(memberSymbol.flags & (ts.SymbolFlags.Value | ts.SymbolFlags.Signature) ) { memberDoc.returnType = getReturnType(typeChecker, memberSymbol); } diff --git a/docs/dgeni-package/processors/readTypeScriptModules.spec.js b/docs/dgeni-package/processors/readTypeScriptModules.spec.js index afb59e95a1..85354d8e10 100644 --- a/docs/dgeni-package/processors/readTypeScriptModules.spec.js +++ b/docs/dgeni-package/processors/readTypeScriptModules.spec.js @@ -58,6 +58,22 @@ describe('readTypeScriptModules', function() { expect(member.name).toEqual('optionalProperty'); expect(member.optional).toEqual(true); }); + + + it('should handle "call" type interfaces', function() { + processor.sourceFiles = [ 'interfaces.ts']; + var docs = []; + processor.$process(docs); + + var moduleDoc = docs[0]; + var exportedInterface = moduleDoc.exports[0]; + expect(exportedInterface.callMember).toBeDefined(); + expect(exportedInterface.callMember.parameters).toBeDefined(); + expect(exportedInterface.callMember.returnType).toBeDefined(); + expect(exportedInterface.newMember).toBeDefined(); + expect(exportedInterface.newMember.parameters).toBeDefined(); + expect(exportedInterface.newMember.returnType).toBeDefined(); + }); }); diff --git a/docs/dgeni-package/templates/type-definition.template.html b/docs/dgeni-package/templates/type-definition.template.html index 7b22c94039..28b2106ca8 100644 --- a/docs/dgeni-package/templates/type-definition.template.html +++ b/docs/dgeni-package/templates/type-definition.template.html @@ -26,6 +26,18 @@ declare module "{$ module.id $}" { {%- endif %} {$ export.docType $} {$ export.name $}{$ export.typeParams $}{$ export.heritage $} {%- if export.docType == 'class' or export.docType == 'interface' %} { + {%- if export.newMember -%} + {$ commentBlock(export.newMember, 5) $} + new ({% for param in export.newMember.parameters %}{$ param $}{% if not loop.last %}, {% endif %}{% endfor %}) + {%- if export.newMember.returnType %}: {$ export.newMember.returnType $}{%- else -%}: any{% endif -%} + ; + {% endif %} + {%- if export.callMember -%} + {$ commentBlock(export.callMember, 5) $} + ({% for param in export.callMember.parameters %}{$ param $}{% if not loop.last %}, {% endif %}{% endfor %}) + {%- if export.callMember.returnType %}: {$ export.callMember.returnType $}{%- else -%}: any{% endif -%} + ; + {% endif %} {%- for member in export.members -%} {$ commentBlock(member, 5) $} {$ member.name $}