An interface is a exactly what it sounds like. It's a description of a particular protocol for communication. Since objects communicate by calling methods on each other, this translates to descriptions of method signatures for an object, everything that the calling code needs to know to use it properly.
An interface A can 'extend' another interface B. This means that A includes all method signatures in B and then declares some more in addition to those.
A class is a description of an actual object. It provides the functionality that is desired. It actually defines what the methods do, i.e, provides the logic for the function, the body. When a class provides all the methods that an interface specifies, that class is said to "implement" the interface (not inherit from). I don't think it's possible in TypeScript for a class to "extend" an interface, only "implement".
In TypeScript when an interface A "extends" class B, it's really just saying that A extends the interface of class B, i.e, includes the signatures of all methods in B. This does NOT mean that the interface