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

#javascript #typescript #class-method

#javascript #typescript #класс-метод

Вопрос:

Я хочу защитить все методы класса и предотвратить их перезапись, например Object.assign(dog, { bark: true}); . Кто-то сказал, что по этой причине вы не должны использовать методы класса в Typescript, потому что, в отличие от простых функций и методов, методы класса перезаписываются.

 class Animal {
  eingezahltkaptial: number[]=[1,2,3];

  move(distanceInMeters: number = 0) {
    console.log(`Animal moved ${distanceInMeters}m.`);
  }
   hello(): void {
      console.log(`Animal moved m.`);
  }
}

class Dog extends Animal {
  bark(): void {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog();
Object.assign(dog, { bark: true});
dog.bark();

[ERR]: "Executed JavaScript Failed:" 
[ERR]: dog.bark is not a function 
  

Комментарии:

1. Почти все в JavaScript перезаписывается, вы просто не должны этого делать. Чего вы пытаетесь достичь, просто получить ошибку компиляции typescript? Ошибка времени выполнения в Object.assign строке? Объект, на который Object.assign строка не влияет, и который все еще может вызывать свой .bark() метод впоследствии? Что-то еще?

2.Не уверен, что вам действительно нужно. Object.assign не изменяет методы / свойства, доступные только для чтения, он переопределяет методы / свойства с одинаковыми именами. Поэтому ошибка на 100% верна, потому Object.assign что строка переопределяет .bark Boolean свойство, которое не является функцией.