Приведение типа объекта с помощью JSDoc - PullRequest
0 голосов
/ 14 июля 2020

класс B расширяет класс A. Моя функция factory возвращает object с типом A.

Функция doSomethingWithB ожидает и объект с типом B. Если я создаю новый объект с фабрикой, и я уверен, что его тип - B, как я могу сузить тип переменной в JSDo c, чтобы сообщить IDE, что этот тип не является несовместимым? Как отливка Java ...

class A {

}

class B extends A {

}

/**
 * @param {string} type
 * @returns {A}
 */
function factory(type) {

    return new factory.types[type]();
}

/**
 * @type {{A: A, B: B}}
 */
factory.types = {
    'A': A,
    'B': B
}

/**
 * @param {B} bObj
 */
function doSomethingWithB(bObj) {
    console.log(bObj);
}

const bObj = factory('B');

doSomethingWithB(bObj);
...