Repository: TypeScript
Issue: JSDoc: @inheritDoc disregards optionality of parameters from parent class method
Labels: Bug,Effort: Difficult,Domain: JSDoc,feature-request

<!-- 🚨 STOP 🚨 𝗦𝗧𝗢𝗣 🚨 𝑺𝑻𝑶𝑷 🚨

Half of all issues filed here are duplicates, answered in the FAQ, or not appropriate for the bug tracker. Even if you think you've found a *bug*, please read the FAQ first, especially the Common "Bugs" That Aren't Bugs section!

Please help us by doing the following steps before logging an issue:
  * Search: https://github.com/Microsoft/TypeScript/search?type=Issues
  * Read the FAQ: https://github.com/Microsoft/TypeScript/wiki/FAQ

Please fill in the *entire* template below.
-->

<!--
Please try to reproduce the issue with the latest published version. It may have already been fixed.
For npm: `typescript@next`
This is also the 'Nightly' version in the playground: http://www.typescriptlang.org/play/?ts=Nightly
-->
**TypeScript Version:**  3.8.3

<!-- Search terms you tried before logging this (so others can find this issue more easily) -->
**Search Terms:** inheritDoc optionality jsdoc

**Code**

A conceptual example of JSDoc-annotated ES6 classes I'm generating `d.ts` definitions for

```js
class Base {
  /**
   * @abstract
   * @param {Array<import("./Layer.js").default>} [opt_array] Array of layers (to be
   *     modified in place).
   * @return {Array<import("./Layer.js").default>} Array of layers.
   */
  getLayersArray(opt_array) {
    return abstract();
  }
}

class Derived extends Base {
  /**
   * @inheritDoc
   */
  getLayersArray(opt_array) {
      return [];
  }
}
```

**Expected behavior:**

TypeScript to transpile this to something resembling this

```ts
declare class Base {
    /**
     * @abstract
     * @param {Array<import("./Layer.js").default>} [opt_array] Array of layers (to be
     *     modified in place).
     * @return {Array<import("./Layer.js").default>} Array of layers.
     */
    getLayersArray(opt_array?: any[]): any[];
}
declare class Derived extends Base {
    /**
     * @inheritDoc
     */
    getLayersArray(opt_array?: any): any[];
}


```

**Actual behavior:**

The optionality specifier is lost on `Derived.getLayersArray`

```ts
declare class Base {
    /**
     * @abstract
     * @param {Array<import("./Layer.js").default>} [opt_array] Array of layers (to be
     *     modified in place).
     * @return {Array<import("./Layer.js").default>} Array of layers.
     */
    getLayersArray(opt_array?: any[]): any[];
}
declare class Derived extends Base {
    /**
     * @inheritDoc
     */
    getLayersArray(opt_array: any): any[];
}
```

**Playground Link:** <!-- A link to a TypeScript Playground "Share" link which demonstrates this behavior -->

https://www.typescriptlang.org/play/?useJavaScript=true#code/MYGwhgzhAEBCkFNoG8CwAoa0D0AqXGW0u0AAmAEYQAuATmMNYViaQA5j0C2KAgrfQCeAHgCWXNgHta1ABQAiAHTYAMmEEJaigFYR5ASkUATBADMwAVxDUAfAF9oAbUltqAfU5CAutH5DokqbQ4Bq0MLLUktAUCMzERFhckkaipqIIRtCiAHbQbODACIZxrLQI1Ba0uch+6mIS0nJKquqaOnqGJuZWtg61ggFBIZoQiiXYzADm5WqhEP2yLu6e6voocdBlFVXQlDT0jLL6ANzMdhjn6BigkDAAIpqiAG4Z0AgAHtQI2UYw8BBINCYHD4EpkHIAC0e1DukmA4ymM1aYQWSw8AlW62BCS2lVyji8p2BlzsQA

**Related Issues:** <!-- Did you find other bugs that looked similar? -->

EDIT: In the original ES6 example, the class `Derived` didn't actually extend `Base` which led to the possibility I may have submitted an invalid report. Fixing the code sample and re-running the playground with the updated example ES6 code showed the problem to still persist. Code sample in this issue and playground link have been updated.