@VovaSakay

Как затипизировать метод?

Сейчас
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;
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Хотелось бы знать, что за тип такой Constants, возможно всё можно сделать проще.
Но условно - как-то так:
enum Constants {
  VERTICAL = 'vertical',
  STEP = 'step'
}

interface ConstantsTypes {
  [Constants.VERTICAL]: boolean,
  [Constants.STEP]: number,
}

public get<T extends keyof ConstantsTypes>(prop: T): ConstantsTypes[T] {}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы