Мне нужно добавить функцию, прикрепленную к узлу таким образом:
myElement = querySelector('#myElement');
myElement.moveMe = () =>{
//move Me Code;
}
Но я не знаю, как документировать эту функцию (а также предотвращать ошибки линта), я пробовал использовать @extend
с @typedef
, но там сказано, что он работает только с конструкторами.
2 ответа
Я мог бы предположить, что правильный способ сделать это - создать объект с помощью самого {el: myElement, moveMe: ()=>{}}
, но если вы должны расширить, это будет выглядеть так:
/**
* @constructor
* @extends {HTMLElement}
*/
const NewType = function() {};
/** @type {function()} */
NewType.prototype.moveMe = function(){};
/** @type {NewType} */
const myElement = /** @type {NewType} */ (document.querySelector('body div'));
myElement.moveMe = () =>{
//move Me Code;
console.log('dont remove me');
}
(Не уверен насчет вашего стека, просто отмечая мой 2C из недавних (2019-Q1) личных проблем с VSCode JSDoc.)
Теоретически кажется, что можно использовать простой @typedef
с объявлением "родительского" типа: ( это не работает )
/**
* @typedef {HTMLElement} movableElement
* @property {function} moveMe
*/
/** @type movableElement */
var myElement = document.querySelector('#myElement');
myElement.moveMe; // NOPE, not present for some reason :(
myElement.tabIndex; // ok, this is from HTMLElement
Наиболее близким к намерению расширить собственные HTML-элементы с помощью настраиваемых свойств было &
«Обозначение типа пересечения», о котором я узнал из этот комментарий либо с помощью вспомогательного типа:
/**
* @typedef movable
* @property {function} moveMe
*/
/**
* @typedef {HTMLElement & movable} movableElement
*/
/** @type movableElement */
var myElement = document.querySelector('#myElement');
myElement.moveMe; // ok
myElement.tabIndex; // ok (HTMLElement properties are present as well)
Или даже без вспомогательного типа, с прямым пересечением:
/**
* @typedef {HTMLElement & {moveMe: function}} movableElement
*/
/* ... */
Как ни странно, любое объявление @property
, добавленное к такому расширенному типу, кажется, полностью игнорируется (как и наше свойство в первой неудачной попытке, я до сих пор не знаю почему).
Я изо всех сил пытался добиться чего-то подобного - расширить HTMLElement с помощью некоторых хакерских пользовательских свойств в JavaScript в VSCode - и после исчерпывающих SO / github / docs, погруженных в это решение для обходного пути, вполне сработало для меня.
Похожие вопросы
Новые вопросы
jsdoc
JSDoc - это язык разметки для добавления встроенной документации API в исходный код JavaScript. Это отличается от различных инструментов, которые анализируют и манипулируют кодом, который соответствует синтаксису JSDoc.