Какой предпочтительный метод в Typescript для сброса / сброса свойства numeri c: Undefined? Пусто? Ноль? - PullRequest
1 голос
/ 05 мая 2020

Я не новичок в JS, но с новым TS. Google-fu не ответил за меня. Интересно, что ты скажешь. Пример использования: у меня есть объект оценки с несколькими свойствами, включая два фактических значения оценки для каждого набранного числа. После прохождения викторины генерируются разные сообщения в зависимости от того, какие баллы содержат ответы (и их значения). Если вы перезапустите, баллы будут сброшены.

Что мне следует инициализировать и сбросить эти свойства (и, следовательно, проверить), чтобы что A. Я могу увеличить их. Б. Я могу проверить позже, тронули ли они их.

Очевидный ответ - 0, но 0 является допустимым результатом в обеих викторинах. Моя следующая склонность - Null, но в JS Null на самом деле является объектом и конфликтует с типом. Я склоняюсь к go с undefined, что дает отрицательный результат и относится к типу undefined. Это плохая идея? Есть ли более надежный / элегантный вариант

Я не знаю, нужен ли код, чтобы проиллюстрировать это, но вот скелет:

export interface ScoreObjTemplate {
    pol    : number,
    group  : string
    quiz   : string,
    choice : number,
    wVal   : number,
    fooScore ? : number,
    barScore ? : number
}

// a number of functions that iterate through questions for one or both quizes, adding positive or negative values based on choices 
this.myScore.fooScore = this.myScore.fooScore + myAnswer.Val

const myScore: ScoreObjTemplate;

if (this.myScore.fooScore) {
  generateMessage(this.myScore.fooScore);
}

if (this.myScore.barScore) {
  generateMessage(this.myScore.barScore);
}

generateMessage(score){
 switch(score)
   case < 0: 
     fooMsg = "lorem";
     break;
   case 0:
     fooMsg = "Ipsum";
     break;
   case >10:
     fooMsg = "Dolar";
     break;
   default:
     fooMsg = "Amet";
}

Заранее спасибо

1 Ответ

0 голосов
/ 05 мая 2020

Я думаю, что fooScore, barScore могут быть структурированы как объекты с их собственным внутренним состоянием, и вы можете извлекать любое взаимодействие с ними в методы.

Обратите внимание на следующий пример

const myScore = {
  pol: 0,
  group: "",
  quiz: "",
  choice: 0,
  wVal: 0,
  fooScore: {
    active: false,
    value: 0
  },
  barScore: {
    active: false,
    value: 0
  }
}

function generateMessage(score) {
  let message = "";

  switch (true) {
    case (score.value < 0):
      message = "lorem";
      break;
    case 0:
      message = "Ipsum";
      break;
    case (score.value > 10):
      message = "Dolar";
      break;
    default:
      message = "Amet";
  }

  return message;

}

function setScore(score, value) {
  return {
    active: true,
    value: score.value + value
  }
}

function resetScore(score) {
  if (!score.active) {
    return score;
  }

  return {
    active: false,
    value: 0
  }
}

const random = (from, to) => Math.floor(Math.random() * (to - from) + from);

function simulateQuiz() {
  const myAnswer = {
    Val: random(-2, 2)
  }

  switch (random(0, 4)) {
    case 0:
      myScore.fooScore = setScore(myScore.fooScore, myAnswer.Val);
      console.log('seting fooScore', myScore.fooScore)
      break
    case 1:
      myScore.barScore = setScore(myScore.barScore, myAnswer.Val);
      console.log('seting barScore', myScore.barScore)
      break
    case 2:
      myScore.fooScore = resetScore(myScore.fooScore);
      console.log('reseting fooScore');
      break;
    case 3:
      myScore.barScore = resetScore(myScore.barScore);
      console.log('reseting barScore');
      break;
  }

  let message = '';

  if (myScore.fooScore.active) {
    message = generateMessage(myScore.fooScore);
  }

  if (myScore.barScore.active) {
    message = generateMessage(myScore.barScore);
  }

  console.log(message);
}

setInterval(simulateQuiz, 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...