microsoft / microsoft/TypeScript

JSDoc: @inheritDoc disregards optionality of parameters from parent class method

Aperta
#37,210 2 commenti 1 reazione 1 assegnatario Vedi su GitHub

@sandersn ci sta già lavorando.

Dal 4/3/2020.

Bug Domain: JSDoc Effort: Difficult
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

TypeScript Version: 3.8.3

Search Terms: inheritDoc optionality jsdoc

Code

A conceptual example of JSDoc-annotated ES6 classes I'm generating d.ts definitions for

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

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

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:

https://www.typescriptlang.org/play/?useJavaScript=true#code/MYGwhgzhAEBCkFNoG8CwAoa0D0AqXGW0u0AAmAEYQAuATmMNYViaQA5j0C2KAgrfQCeAHgCWXNgHta1ABQAiAHTYAMmEEJaigFYR5ASkUATBADMwAVxDUAfAF9oAbUltqAfU5CAutH5DokqbQ4Bq0MLLUktAUCMzERFhckkaipqIIRtCiAHbQbODACIZxrLQI1Ba0uch+6mIS0nJKquqaOnqGJuZWtg61ggFBIZoQiiXYzADm5WqhEP2yLu6e6voocdBlFVXQlDT0jLL6ANzMdhjn6BigkDAAIpqiAG4Z0AgAHtQI2UYw8BBINCYHD4EpkHIAC0e1DukmA4ymM1aYQWSw8AlW62BCS2lVyji8p2BlzsQA

Related Issues:

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.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.