title: Is there any semantic difference between interfaces and type aliases?
body: <p>I can do most of the same thing with interfaces and type aliases. </p>
  
  <p>For example</p>
  
  <p><strong>Classes can implement either interfaces or type aliases</strong></p>
  
  <pre><code>interface Shape {
      area(): number;
  }
  
  type Perimeter = {
      perimeter(): number;
  }
  
  class Rectangle implements Shape, Perimeter {
  }
  </code></pre>
  
  <p><strong>They can be combined to create new interfaces/type aliases</strong></p>
  
  <pre><code>interface A {
      a: string;
  }
  
  type B = {
      b: string
  }
  
  interface C extends B {
      c: string;
  }
  
  type D = A &amp; {
      d: string;
  }
  </code></pre>
  
  <p>Is there a semantic difference between the interfaces and type annotations? </p>