diff --git a/lib/tsd-jsdoc/publish.js b/lib/tsd-jsdoc/publish.js index 20dcc3fb4..22c124420 100644 --- a/lib/tsd-jsdoc/publish.js +++ b/lib/tsd-jsdoc/publish.js @@ -314,6 +314,18 @@ function writeInterface(element) { // handles a single element of any understood type function handleElement(element, parent, insideClass) { + if (element.optional !== true && element.type && element.type.names && element.type.names.length) { + for (let i = 0; i < element.type.names.length; i++) { + if (element.type.names[i].toLowerCase() === 'undefined') { + // This element is actually optional. Set optional to true and + // remove the 'undefined' type + element.optional = true; + element.type.names.splice(i, 1); + i--; + } + } + } + if (seen[element.longname]) return true; if (isClassLike(element)) { @@ -460,7 +472,10 @@ function handleMember(element, parent) { } else write(element.kind === "constant" ? "const " : "var "); - write(element.name, ": "); + write(element.name); + if (element.optional) + write("?"); + write(": "); if (element.type && element.type.names && /^Object\b/i.test(element.type.names[0]) && element.properties) { writeln("{");