Сейчас
public get<T>(prop: Constants): T {}
Вызов
const VERTICAL = 'vertical';
const STEP = 'step';
this.model.get(VERTICAL) // VERTICAL значит должен возвращать только boolean
this.model.get(STEP) // STEP значит должен возвращать только number
Как мне затипизировать метод get, чтобы он возвращал тип данных в зависимости от константы?
// это не предлагать)
<boolean>this.model.get(VERTICAL)
<number>this.model.get(STEP)
Подобное я сделал с методом add
public add({ value, prop }: ActionsModel): void { }
interface Action<T> {
prop: T;
}
interface ActionPayload<T, Y> extends Action<T> {
value: Y;
}
type ActionStep = ActionPayload<Constants.STEP, number>;
type ActionVertical = ActionPayload<Constants.VERTICAL, boolean>;
type ActionsModel = ActionStep | ActionVertical;