@Dadad

Как определить тип переменной в зависимости от типа другой?

Есть код на ts:
interface ModelOptions {
  value: [number, number] | number
  range: boolean
}

Как для value задать тип [number, number], если range === true и наоборот?
  • Вопрос задан
  • 168 просмотров
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
Максимально близкое к желаемому это Discriminating Unions

interface ModelOptionRange {
  value: [ number, number ];
  range: true;
}

interface ModelOptionValue {
  value: number;
  range: false;
}

type ModelOption = ModelOptionRange | ModelOptionValue;

function check(v: number, cond: ModelOption): boolean {
  if (cond.range) {
    // тут cond точно типа ModelOptionRange
    const [ min, max ] = cond.value;
    return (min <= v && v <= max);
  } else {
    // а тут ModelOptionValue
    return v === cond.value;
  }
}


песочница
Ответ написан
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
Пригласить эксперта
Ваш ответ на вопрос

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

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