正常父类的构造器里会用到一些单例工具类,而且这种后续还会增加。例如:
export class ClassA { constructor( public s1: ServiceA, public s2: ServiceB, public s3: ServiceC, ) { }}export class ClassB extends ClassA { constructor( public s1: ServiceA, public s2: ServiceB, public s3: ServiceC, ) { super(s1, s2, s3); }}
子类必须调父类构造器,这种传参代码,每次复制粘贴。主要是后续增加一个参数,每个子类都得改过去。
就不能设计成子类默认就有一样的构造器,已经隐式调用了super,别让人手写
export class ClassA { constructor( public s1: ServiceA, public s2: ServiceB, public s3: ServiceC, ) { }}export class ClassB extends ClassA { constructor(...args: ConstructorParameters<typeof ClassA>) { super(...args); }}
可以使用装饰器试试
type Constructor<T = {}> = new (...args: any[]) => T;function AutoSuper<T extends Constructor>(constructor: T) { return class extends constructor { constructor(...args: any[]) { super(...args); } };}export class ClassA { constructor( public s1: number, public s2: number, public s3: number, ) { }}@AutoSuperexport class ClassB extends ClassA {}
问题内容: 我正在与colyseus(节点游戏服务器框架)进行服务器端聊天。我将typescript与module:commonjs一起使用,因为colyseus是基于commonjs构建的。 我有延伸的课。在运行时出现此错误: 和JavaScript的麻烦: 从打字稿类: 编译后删除有问题的行时,很容易跳过该错误。但是没有创建基类,这不是一个完整的解决方案。 我用谷歌搜索了这个问题,它似乎与ba
问题内容: 我在使用webstorm打字稿编译器时遇到问题。我有以下课程 因此,键入“ super”,我会在智能感知中看到所有rootData公共方法。但是在设置super.insert()之后,出现以下错误: TS2340:仅可通过’super’关键字访问基类的公共和受保护的方法 在TS游乐场中尝试过,它正在工作(认为是简化版本)。 谢谢你的帮助。 编辑:检查编译的javascript后,超级方
本文向大家介绍TypeScript 基本继承,包括了TypeScript 基本继承的使用技巧和注意事项,需要的朋友参考一下 示例 本示例说明如何Car使用extends关键字创建该类的非常简单的子类。的SelfDrivingCar类重写move()方法和用途使用基类FPGA实现super。
本文向大家介绍php构造函数的继承方法,包括了php构造函数的继承方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php构造函数的继承方法。分享给大家供大家参考。具体如下: 第一种情况:子类没有定义构造函数时,默认继承。例子: 输出结果:小强 第二种情况:子类定义了构造函数,则不会被继承。实例: 输出结果:BBBBBB子类 第三种情况:如果需要调用父类的构造函数,则可以使用:paren
我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与
就像标题所说的,如果我的类allready已经实现了一个接口,有没有理由我应该有一个构造函数呢?在我看来这是重复的代码。