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
