Задать вопрос
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно

Как через прокси функцию вернуть конкретный тип метода?

У меня есть набор классов, от одного родителя. Все методы возвращают одинаковые типы, для каждого метода.
Есть ф-ця 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)

  • Вопрос задан
  • 81 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы