当前位置: 首页 > 知识库问答 >
问题:

typescript - Typescript继承,子类有没有方便一点的构造器使用方法?

滕项明
2024-02-04

正常父类的构造器里会用到一些单例工具类,而且这种后续还会增加。例如:

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,别让人手写

共有2个答案

都才俊
2024-02-04
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);    }}
濮阳烨然
2024-02-04

可以使用装饰器试试

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已经实现了一个接口,有没有理由我应该有一个构造函数呢?在我看来这是重复的代码。