класс 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);