#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… затем экспортируйте его в конце вашего объявления. вот и все