具有不同名称但扩展相同类的多个类

3

比如我有这个类:

abstract class MyClass {
  abstract myProp: number;

  constructor() {
    // Some code
  }
}

我想创建多个继承此类的类。但是我不想重复多次,因为我将有很多类。因此,目的是每个类都有不同的名称和myProp。

例如:

class FirstClass extends MyClass {
  myProp = 1;
  constructor() {
    super();
    // Some code
  }
}

class SecondClass extends MyClass {
  myProp = 2;
  constructor() {
    super();
    // Some code
  }
}

我希望能够生成这些类(例如使用函数),但问题在于我必须使用new关键字。 因此,每个类的使用应该像这样:

const myConst = new FirstClass();
const myConst2 = new SecondClass();

我希望这有些意义。我只是不想因为类名和myProp不同而重复每个类。


如果只是一个属性发生了变化,你不能直接将其传递给构造函数吗? - Jonas Wilms
不,每个班级应该有一个不同的名称,所以我不能这样做... - Loeka Lievens
2个回答

2
您可以通过返回匿名类的函数来创建类。
const createClass = ( prop: number ) => {
    return class extends MyClass {
        myProp: number;

        constructor () {
            super();
            this.myProp = prop;
        }
    }
}

const FirstClass = createClass(1);

const x = new FirstClass();
console.log(x.myProp);

或者,查看以下问题的答案以获取灵感:


0
如果我理解你的问题正确的话,你可以将不同的变量作为参数传递给构造函数。
class MyClass {
  myProp: number;

  constructor(myProp: number) {
    this.myProp = myProp
    // Some code
  }
}

然后创建你想要的类实例。

const myConst = new MyClass(1);
const myConst2 = new MyClass(2);

个人而言,我只会在想要添加一些不共享的方法或属性时才会扩展一个类。由于myProp在两个类中都存在,最好的做法可能是将值直接传递给构造函数。

不,每个班级应该有一个不同的名称,所以我不能这样做... - Loeka Lievens
1
你能解释一下为什么它们应该有不同的类名吗? - Y. Gherbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接