title: How to avoid missing property TypeScript error on types extending a function or array
body: <p>When I define an interface which extends from a function or array, I have not found a way to properly create new instances without getting an error or using an <code>any</code> cast.</p>
  
  <p>Is there a way to initialize such members without reverting to hacks?</p>
  
  <p>Example with Function:</p>
  
  <pre><code>interface Foo {
      bar: any;
      (): void;
  }
  
  // how to create a Foo?
  var foo: Foo;
  foo = () =&gt; {}; // cannot convert type ... has non-optional property bar which is not present
  foo.bar = "initialized!";
  </code></pre>
  
  <p>Example with Array:</p>
  
  <pre><code>interface Foo&lt;T&gt; extends Array&lt;T&gt; {
      bar: any;
  }
  
  // how to create a Foo?
  var foo: Foo&lt;any&gt;;
  foo = []; // cannot convert type ... has non-optional property bar which is not present
  foo.bar = "initialized!";
  </code></pre>