title: Method parameter should be subclass of given class
body: <p>I am struggling with defining a method to take subclasses of a base class correctly.</p>
  
  <pre><code>handle(content: AbstractClass)
  </code></pre>
  
  <p>Calling it directly with an inherited class leads to <strong>Argument of type 'ConcreteClass' is not assignable to parameter of type 'AbstractClass'</strong>.</p>
  
  <p>I have tried it with an interface, similar result <strong>Argument of type 'typeof ConcreteClass' is not assignable to parameter of type 'Interface'</strong></p>
  
  <pre><code>class AbstractClass implements Interface
  
  handle(content: Interface)
  </code></pre>
  
  <p>I have found a question to a similar <a href="https://stackoverflow.com/q/38311672/390177">topic</a> but the solution also don't helps me.</p>
  
  <pre><code>interface ClassConstructor&lt;T extends AbstractClass&gt; {
    new(): T;
  }
  
  abstract class AbstractClass {
    private test: string;
  
    constructor(value: string) {}
  }
  
  class B extends AbstractClass {
    private test2: string;
  
    constructor(value: string, value2: number) {
      super(modal);
    }
  }
  
  class S1 {
    show(content: ClassConstructor&lt;AbstractClass&gt;) {}
  
    b() {
      this.a(B);
    }
  }
  </code></pre>
  
  <p>On <a href="https://www.typescriptlang.org/play/#src=interface%20ClassConstructor%3CT%20extends%20A%3E%20%7B%0A%20%20new()%3A%20T%3B%0A%7D%0A%0Aabstract%20class%20A%20%7B%0A%20%20private%20test%3A%20string%3B%0A%0A%20%20constructor(value%3A%20string)%20%7B%7D%0A%7D%0A%0Aclass%20B%20extends%20A%20%7B%0A%20%20private%20test2%3A%20string%3B%0A%0A%20%20constructor(value%3A%20string%2C%20value2%3A%20number)%20%7B%0A%20%20%20%20super(value)%3B%0A%20%20%7D%0A%7D%0A%0Aclass%20S1%20%7B%0A%20%20a(content%3A%20ClassConstructor%3CA%3E)%20%7B%7D%0A%20%20b()%20%7B%0A%20%20%20%20this.a(B)%3B%0A%20%20%7D%0A%7D" rel="nofollow noreferrer">playground</a></p>
  
  <p>I want to achieve that the method <code>show</code> can take every implementation of the <em>AbstractClass</em> regardless how it is defined f.e. different constructors and similar.<br>
  I am using it in combination with Angular and Angular resolves dependencies via the constructor.</p>
  
  <p>How can I do this with TypeScript?</p>