У меня есть набор классов, от одного родителя. Все методы возвращают одинаковые типы, для каждого метода.
Есть ф-ця driver которая по какой-то логике решает от какого класса вызвать метод передаваемый в аргументе.
В результате driver возвращает микс типов, для вызова любого аргумента.
Вопрос как ts показать, что передав аргумент `getString` - я хочу получить в переменной stringResult тип string
Попытка реализации
interface ParentI {
getString: () => string;
getNumber: () => number;
getBoolean: () => boolean;
}
class Parent implements ParentI {
getString() {
return 'test';
}
getNumber() {
return 2;
}
getBoolean() {
return true;
}
}
class ChildrenA extends Parent {
getString() {
return 'first';
}
getNumber() {
return 2;
}
}
class ChildrenB extends Parent {
getString() {
return 'second';
}
getNumber() {
return 2;
}
}
type R = keyof ParentI;
class Driver {
childrenA = new ChildrenA();
childrenB = new ChildrenB();
resolveMethod(methodName: R) {
const random = Math.random();
if (random > 0.5) {
return this.childrenA[methodName]();
} else {
this.childrenB[methodName]();
}
}
}
const driver = new Driver();
const stringResult = driver.resolveMethod('getString'); // тут возвращается (string | number | boolean) - надо только (string)
const numberResult = driver.resolveMethod('getNumber'); // тут возвращается (string | number | boolean) - надо только (number)
const BooleanResult = driver.resolveMethod('getBoolean'); // тут возвращается (string | number | boolean) - надо только (boolean)