title: Type checking and generics
body: <p>Let's say I have an interface:</p>
  
  <pre><code>interface Comparable&lt;T&gt; {
      equals(other:T):boolean
  }
  </code></pre>
  
  <p>Which then I'm implementing in several classes:</p>
  
  <pre><code>class Rectangle implements Comparable&lt;Rectangle&gt; {
  
      equals(other:Rectangle):boolean {
          // logic
          return true;
      }
  
  }
  
  class Circle implements Comparable&lt;Circle&gt; {
  
      equals(other:Circle):boolean {
          // logic
          return true;
      }
  
  }
  </code></pre>
  
  <p>Why TypeScript allows for comparing rectangle and circle?</p>
  
  <pre><code>let circle:Circle = new Circle();
  let rectangle:Rectangle = new Rectangle();
  console.log( circle.equals(rectangle) );
  </code></pre>
  
  <p>Shouldn't it warn me that I provided incompatible type to circle's <em>equals</em> method?</p>