微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止方法被覆盖并分配其他类型?

如何解决如何防止方法被覆盖并分配其他类型?

我想保护所有的类方法并防止它们被覆盖,例如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 

解决方法

您应该冻结课程。装饰器模式是实现它的一种简单方法,但是您也可以自己调用冻结。 (Object.assign不是typesafe的打字工具,不是很好的工具)

function frozen(target: Function): void {
  Object.freeze(target);
  Object.freeze(target.prototype);
}

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

const dog = new Dog();
Object.assign(dog,{ bark: true }); // TypeError: Cannot assign to read only property 'bark' of object '#<Dog>'
dog.bark();

关于人们对readonly的评论:

  • readonly可以应用于方法;仅属性
  • readonly是仅TS的功能,如果软件处于可以动态发生突变的状态,那么它将提供零保护
  • 适用于只读且使用.freeze的地方,TS会自动将readonly修饰符添加到属性中,而无需手动将其添加到其中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。