Задать вопрос

Почему ref не требует обращение к value?

Здравствуйте.
Вот есть псевдокод на котором хочу понять, что происходит не так:
import { Ref, ref } from 'vue';

class Enemy {
  x = ref(0);
  y = ref(0);
  hp = ref(100);
}

class Enemies {
  enemies: Ref<Array<Enemy>> = ref([]);
  addEnemy = () => {
    this.enemies.value.push(new Enemy());
  };
  moveEnemies = () => {
    this.enemies.value.forEach((enemy) => {
      if (enemy.hp > 0) {
        enemy.x += 1;
      }
    });
  };
}
const enemies = new Enemies();
enemies.addEnemy();
enemies.moveEnemies();

Почему при переборе объектов в методе moveEnemies через forEach, когда я обращаюсь к enemy.x, не требуется указывать value? Вот так:
this.enemies.value.forEach((enemy) => {
	if (enemy.hp.value > 0) {
	  enemy.x.value += 1;
	}
});

Код без value работает, но TS ругается на типы, поскольку enemy.x является Ref и нельзя ему присвоить новое число или выполнять операции математические.

И если допустим проверку if (enemy.hp > 0) я могу пройти, добавив защиту через toValue(enemy.hp), то вот с присваиванием enemy.x — не могу.
this.enemies.value.forEach((enemy) => {
	if (toValue(enemy.hp) > 0) {
	  enemy.x += 1;
	}
});


Конечно, можно добавить gett'er к объекту enemy, либо просто метод, записывающий в x.value значение. Но хочется разобраться, что я упускаю
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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