title: Difference between call signature and function type
body: <p>I'm trying to understand why we have different syntax for call signatures and for function types. Consider the following code:</p>
  
  <pre><code>interface MyInterface {
     // This is call signature
     // It is used inside object type, function expression, function declaration, etc...
      (x:number, y:number):number; 
  }
  
  var myOne : MyInterface = (x,y) =&gt; x + y;
              // vv this is function type
  var myTwo : (x:number, y:number)=&gt;number = (x,y) =&gt; x + y; 
  // function type is used in function type literal
  </code></pre>
  
  <p>In this code <code>myOne</code> and <code>myTwo</code> variables effectively the same. They are (as far as I can see) of the very same type, just defined differently.</p>
  
  <p>Now when we are using interface for defining them we use <em>call signature</em> that looks like this:</p>
  
  <pre><code>(x:number, y:number):number
  </code></pre>
  
  <p>When we are not using interface we use <em>function type literal</em>:</p>
  
  <pre><code>(x:number, y:number)=&gt;number
  </code></pre>
  
  <p>Both express the same thing, names and types of parameters and types of the return type. I would like to know, why do we need two different yet so similar ways to write the same thing in typescript?</p>