пользовательский класс массива не работает с jsdoc

#javascript #arrays #class

#javascript #массивы #класс

Вопрос:

Привет, я пытаюсь использовать тег JSDoc @type, чтобы определить, что хранит этот констебль. Вот мои коды

 /* eslint-disable no-mixed-spaces-and-tabs */
/* eslint-disable valid-jsdoc */
// eslint-disable-next-line no-unused-vars
// eslint-disable-next-line no-unused-vars

/**
* The Queue class.
*/
module.exports = class Queue extends Array {

    constructor(player) {
        super();
        this.player = player;
    }
    /** Returns the total duration of the queue including the current track. */
    get duration() {
        const current = (this.player.current || {}).length || 0;
        return this.map((track) => track.length).reduce((acc, cur) => acc   cur, current);
    }

    push(...args) {
        const result = super.push(...args);
        // this.player.emit('queueAdd', null);
        return resu<
    }

    shift() {
        const result = super.shift();

        // this.player.emit('queueRemove', null);

        return resu<
    }

    unshift(...args) {
        const result = super.unshift(...args);

        // this.player.emit('queueAdd', null);

        return resu<
    }

    splice(...args) {
        const data = super.splice(...args);
        // this.player.emit('queueRemove', null);

        return data;
    }


    /**
    * Removes an amount of tracks using a start and end index.
    * @param start The start to remove from.
    * @param end The end to remove to.
    */
    removeFrom(start, end) {
       if (isNaN(start)) {
           throw new RangeError(`Queue#removeFrom() Missing "start" parameter.`);
       } else if (isNaN(end)) {
           throw new RangeError(`Queue#removeFrom() Missing "end" parameter.`);
       } else if (start >= end) {
           throw new RangeError(`Queue#removeFrom() Start can not be bigger than end.`);
       } else if (start >= this.length) {
           throw new RangeError(`Queue#removeFrom() Start can not be bigger than ${this.length}.`);
       }
       return this.splice(start, end - start);
    }
    /**
    * Removes a track from the queue. Defaults to the first track.
    * @param [position=0] The track index to remove.
    * @returns The track that was removed, or null if the track does not exist.
    */
    remove(position = 0) {
       return this.splice(position, 1)[0];
    }
    /** Clears the queue. */
    clear() {
       this.splice(0);
    }
    /** Shuffles the queue. */
    shuffle() {
       for (let i = this.length - 1; i > 0; i--) {
           const j = Math.floor(Math.random() * (i   1));
           [this[i], this[j]] = [this[j], this[i]];
       }
    }

};

 

То, что я пытаюсь сделать, это

 /**
* @type {Queue<TrackClass>}
**/
const queue = new Queue();
 

Но моя среда разработки (vscode) считает его неопределенным / любым.
Как заставить его видеть его как пользовательский класс массива, хранящий класс TrackClass?

Если я попытаюсь выполнить {TrackClass[]} работает, но если я это сделаю, это не сработает. В чем, по-видимому, проблема?

Комментарии:

1. Если вы попытаетесь сделать TrackClass[] работает? где? Вы должны объявить свой класс, а затем экспортировать его, используя синтаксис module.exports . Вы используете TypeScript?

2. Я использую javascript. В typescript можно делать то, что я делаю, но не в js, я хочу сделать это в javascript

3. если я сделаю @type {TrackClass[]} const queue = new Queue(); это работает, но моя среда разработки не обнаружит дополнительные методы пользовательского класса массива

4. с какой стати вы хотели бы это сделать, я не знаю. Просто используйте class… затем экспортируйте его в конце вашего объявления. вот и все