Как указать тип шаблона унаследованного класса? - PullRequest
0 голосов
/ 14 марта 2020

Рассмотрим обобщенную коллекцию c:

/**
 * A collection of items of the same type
 * @template TSingleItem
 * */
class ItemsCollection {
    /** @type {TSingleItem[]} **/
    get items() {
        return [createSingleItem()];
    }
    /**
     * Creates a new item based on the implementation type
     * @param {string} param
     * @returns {TSingleItem}
     */
    createSingleItem(param) {
        throw new Error("Pure virtual method call!");
    }
}

Теперь мы реализуем ее как:

class Item {
    constructor(name) {
        this.name = name;
    }
}

class Items extends ItemsCollection {
    createSingleItem(param) {
        return new Item(param);
    }
}

Как мне сказать JSDo c, что предполагается, что items на этот унаследованный класс - Item[] не TSingleItem[]?

Я пробовал это выше класса:

/**
 * @extends {ItemsCollection<Item>}
 * */
class Items extends ItemsCollection

Это не помогло в визуальной студии по крайней мере. Какой правильный синтаксис? Бонусные баллы, если он работает с Visual Studio intellisense.

1 Ответ

0 голосов
/ 14 марта 2020

Оказывается, это правильный код, как это видно и из в этом хорошем руководстве :

/**
 * @extends {ItemsCollection<Item>}
 * */
class Items extends ItemsCollection

Он также работает в Visual Studio 2017, просто потребовалось время, чтобы его освоить , Я оставляю эти вопросы и ответы вместо того, чтобы удалять, потому что это было не совсем очевидно, или Google не мог подтвердить это.

...