Categories
TypeScript Answers

How to extend two classes with TypeScript?

Spread the love

Sometimes, we want to extend two classes with TypeScript.

In this article, we’ll look at how to extend two classes with TypeScript.

How to extend two classes with TypeScript?

To extend two classes with TypeScript, we merge all the properties in each class’ prototype into the class that we want to inherit from the two classes.

For instance, we write

class CanEat {
  public eat() {
    alert("eat.");
  }
}

class CanSleep {
  sleep() {
    alert("sleep.");
  }
}

const applyMixins = (derivedCtor: any, baseCtors: any[]) => {
  baseCtors.forEach((baseCtor) => {
    Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
      if (name !== "constructor") {
        derivedCtor.prototype[name] = baseCtor.prototype[name];
      }
    });
  });
};

class Being implements CanEat, CanSleep {
  eat: () => void;
  sleep: () => void;
}
applyMixins(Being, [CanEat, CanSleep]);

to define the applyMixins function.

In it, we loop through each class in baseCtors with forEach.

In the forEach callback, we get the property names of each class’ prototype with Object.getOwnPropertyNames.

And then we loop through each property name string with forEach.

If its name isn’t 'constructor'.

Then we assign baseCtor.prototype[name] to derivedCtor.prototype[name].

Next, we create the Being class that implements the CanEat and CanSleep classes.

And we call applyMixins to incorporate the property properties from the CanEat and CanSleep classes into the Being class’ prototype.

Conclusion

To extend two classes with TypeScript, we merge all the properties in each class’ prototype into the class that we want to inherit from the two classes.

By John Au-Yeung

Web developer specializing in React, Vue, and front end development.

Leave a Reply

Your email address will not be published. Required fields are marked *