title: Empty interface allow any object?
body: <p>Why empty interface doesn't require object to be empty?</p>
  
  <pre><code>interface A {};
  const a: A = {a: 1};
  console.log(a);
  </code></pre>
  
  <p>is valid code and will output <code>{ a: 1 }</code>.</p>
  
  <p>I would assume that adding optional property should work fine, but</p>
  
  <pre><code>interface A {};
  interface B extends A {
      b?: any;
  }
  const a: B = {a: 1};
  console.log(a);
  </code></pre>
  
  <p>ends with error <code>Type '{ a: number; }' is not assignable to type 'B'</code>.</p>
  
  <ul>
  <li>If interface define what properties object must have, B case should work fine, all required properties are present.</li>
  <li>If interface define what properties object can have, A case should result in error, <code>a</code> is not defined in interface.</li>
  </ul>
  
  <p>Non empty interface defines both what object can and must have.
  Empty interface behaves like <code>any</code>.</p>
  
  <p>Is there explanation why empty interface behaves like this? Is this intentional or just a bug?</p>