有没有办法从父类的构造函数继承参数?

Guy*_*kus 2 constructor super typescript

我遇到的问题是我有一些基类(泛型),它们的属性是通过类的构造函数初始化的。然后,当我扩展该类以创建一个更特定的类时,必须重新键入与基类的构造函数相同的参数,以便将它们传递给super。如果您想象一个非常通用的类,它具有许多通过构造函数初始化的属性,并且经常扩展,那么每次必须不断重新键入所有这些属性以将它们传递给super似乎效率很低。我可能会缺少一些防止这种情况的常见方法。有什么想法可以提高效率吗?也许通过某种方式“继承”父类的构造函数参数?

下面是一个代码示例,并且,你可以看到,在Programmer类的构造函数,我必须重新输入nameage以及height再次仅仅将其传递到super

class Person {
    name: string;
    age: number;
    height: number;

    constructor(name: string, age: number, height: number) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

class Programmer extends Person {
    languages: string[];

    constructor(name: string, age: number, height: number, languages: string[]) {
        super(name, age, height);

        this.languages = languages;
    }
}
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 5

您不能继承,但是可以使用引用该参数,ContructorParameters并且可以将它们散布在派生的构造函数中,只要您不介意在前面添加任何新参数即可:

class Person {
    name: string;
    age: number;
    height: number;

    constructor(name: string, age: number, height: number) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

class Programmer extends Person {
    languages: string[];

    constructor(languages: string[], ...p: ConstructorParameters<typeof Person>) {
        super(...p);

        this.languages = languages;
    }
}

new Programmer(["A"], "", 1, 1) // Since 3.4 you will get actual parameter names in intelisense not just ...p  
Run Code Online (Sandbox Code Playgroud)

但是,不确定它是否是最佳设计,如果您有很多参数,则最好定义一个接口并将其传入。或使用某种映射类型提取相关字段。