एक सामान्य संग्रह पर विचार करें:

/**
 * 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);
    }
}

मैं JSDoc को यह मानने के लिए कैसे कहूं कि विरासत में मिली कक्षा में items Item[] TSingleItem[] नहीं है?

मैंने कक्षा के ऊपर यह कोशिश की:

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

इससे कम से कम विजुअल स्टूडियो में मदद नहीं मिली। सही वाक्यविन्यास क्या है? बोनस अंक अगर यह विजुअल स्टूडियो इंटेलिजेंस के साथ काम करता है।

0
Tomáš Zato - Reinstate Monica 14 मार्च 2020, 17:16

1 उत्तर

सबसे बढ़िया उत्तर

पता चला कि यह सही कोड है, जैसा कि इस अच्छे ट्यूटोरियल में:

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

यह विजुअल स्टूडियो 2017 में भी काम करता है, इसे पकड़ने में बस कुछ समय लगा। मैं इस प्रश्नोत्तर को हटाने के बजाय छोड़ रहा हूं क्योंकि इसकी पुष्टि करना Google के लिए बिल्कुल स्पष्ट या आसान नहीं था।

0
Tomáš Zato - Reinstate Monica 14 मार्च 2020, 17:21