Hvordan genererer man dokumentation for enum-medlemmer, når man genererer TypeScript-definitioner fra JavaScript?


Følgende de officielle instruktioner i Oprettelse af .d.ts-filer fra .js-filer, forsøger jeg at generere definitioner for en JSDoc @enum.

/**
 * The direction enum.
 * 
 * @enum {number}
 */
const Direction = {
  /**
   * Up direction.
   * 
   * @type {number}
   * @constant
   */
  Up: 1,
  /**
   * Down direction.
   * 
   * @type {number}
   * @constant
   */
  Down: 2,
  /**
   * Left direction.
   * 
   * @type {number}
   * @constant
   */
  Left: 3,
  /**
   * Right direction.
   * 
   * @type {number}
   * @constant
   */
  Right: 4,
};
export default Direction;

For min tsconfig.json sørgede jeg for, at removeComments er sat til false. Jeg forventer at se al dokumentation for alle egenskaberne af Direction-objektet videreført til .d.ts-filen, men jeg ser følgende output:

export default Direction;
/**
 * The direction enum.
 */
type Direction = number;
declare namespace Direction {
    const Up: number;
    const Down: number;
    const Left: number;
    const Right: number;
}

Du kan prøve det selv på TS Playground. Hvordan kan jeg sikre, at al dokumentationen overføres korrekt?

Svar #1

Som en midlertidig løsning kunne du bruge både @typedef og @property tags.

Jeg kan dog ikke se, hvorfor vi skulle tilføje @readonly, da TypeScript-konstanter allerede repræsenterer variabler, hvis værdier ikke kan ændres, og Direction-objektet som det er defineret nu, er det ikke virkelig readonly.

Tag definitionen nedenfor som et eksempel:

/**
* @typedef Direction
* @property {number} Up "Up direction"  
* @property {number} Down "Down direction" 
* @property {number} Left "Left direction" 
* @property {number} Right "Right direction"
*/
const Direction = {
  Up: 1,
  Down: 2,
  Left: 3,
  Right: 4,
};
export default Direction;

Ville generere følgende .d.ts-fil:

export default Direction;
export type Direction = {
    /**
     * "Up direction"
     */
    Up: number;
    /**
     * "Down direction"
     */
    Down: number;
    /**
     * "Left direction"
     */
    Left: number;
    /**
     * "Right direction"
     */
    Right: number;
};
declare namespace Direction {
    const Up: number;
    const Down: number;
    const Left: number;
    const Right: number;
}

Ville det fungere for dit anvendelsesområde?

Skål

Relaterede artikler