title: Abstract generic class in typescript
body: <p>I have an abstract generic class in typescript which has a generic method with parameter of class type variable. I tried to implement abstract method in derived class and found that typescript compiler doesn’t check type of parameter in derived method.</p>
  
  <p>Here is an example. I expect that it fails at compile time on <strong>process</strong> method on <strong>Class1</strong> because type of parameter is wrong.</p>
  
  <p>Am I doing something wrong? Or it is by design? Or bug in typescript compiler</p>
  
  <pre><code>class Product {
    id: number;
    name: string;
  }
  
  class Customer {
    id: number;
    name: string;
    address: string;
  }
  
  export abstract class BaseClass&lt;TParam&gt; {
    protected abstract process(param: TParam): void;
  }
  
  export class Class1 extends BaseClass&lt;Customer&gt; {
    protected process(param: Product): void {
      console.log(param);
    }
  }
  </code></pre>