Actualmente estoy trabajando en un proyecto que se escribió antes de que existieran las clases de es6 y, por lo tanto, utiliza una función de creación de clases para todas sus clases.
Estoy usando VSCode y pensé, sería bueno usar algo de IntelliSense, para que las instancias muestren sus métodos, los parámetros y los tipos de devolución, y así sucesivamente, por lo que los documenté usando JSDoc.
Rápidamente descubrí que JSDoc permite la documentación de clases previas a es6. Los documentos casi incluyen mi problema, consulte la documentación de la etiqueta jsdoc: @lends . El ejemplo dado muestra lo siguiente:
/** @class */ var Person = makeClass( /** @lends Person.prototype */ { /** * Create a `Person` instance. * @param {string} name - The person's name. */ initialize: function(name) { this.name = name; }, /** * Say something. * @param {string} message - The message to say. * @returns {string} The complete message. */ say: function(message) { return this.name + " says: " + message; } } );Sin embargo, cuando copio y pego este ejemplo en un archivo javascript vacío y agrego otra línea debajo, como
var p = new Person(""); p.say("")Mi editor, VSCode, no hace sugerencias inteligentes para p.digamos, el mensaje de parámetro (que no se reconoce en absoluto) y p y var Person se muestran como type: any . Habría esperado que p tuviera el tipo Persona y que intellisense reconozca la clase con sus métodos. ¿Por qué no es este el caso, qué estoy haciendo mal?
Ya intenté agregar @type Person o algunas otras etiquetas, pero me gustaría evitar tener un archivo separado como .d.ts solo para escribir sugerencias o separar demasiado la "documentación" y el código. La documentación de una función foobar(foo, bar){ ... } con jsdoc funciona y se muestra la sugerencia de tipo, pero mantener la información de tipo después de las asignaciones de variables parece ser un problema.
(Obviamente: cambiar todo el proyecto a una versión más nueva de javascript o incluso mecanografiado no es una opción).
¡Gracias por cualquier ayuda de antemano!
A quien encuentre esta pregunta:
El principal culpable parece haber sido Visual Studio Code. Usando el IDE Webstorm de IntelliJ, se muestran los trabajos de notación @lends y la finalización del nombre, incluidas las sugerencias de tipo. Si usted, querido lector, tiene el mismo problema y está usando VSCode, pruebe con otro IDE, es posible que funcione...