title: How to get "property missing" error messages with empty (and thus unsealed) objects
body: <p>So, I have an API that takes an options object, something like this:</p>
  <pre class="lang-js prettyprint-override"><code>type Options = { pos: number };
  
  function doTheThing(options: Options) {
  }
  </code></pre>
  <p>Now, if I call this with any of the below, I get a nice error message:</p>
  <pre><code>doTheThing(); // requires another argument.
  doTheThing({ something: 20 }); // missing property &quot;pos&quot;
  </code></pre>
  <p>Great. But if I pass an empty object, Flow will consider this &quot;unsealed&quot; and thus have no issue with it:</p>
  <pre><code>doTheThing({ }); // No error, would like it to say &quot;pos&quot; missing instead.
  </code></pre>
  <p>So, I tried making it exact:</p>
  <pre class="lang-js prettyprint-override"><code>type Options = {| pos: number |};
  </code></pre>
  <p>Now, I get an error, but it's not very nice:</p>
  <pre class="lang-js prettyprint-override"><code>doTheThing({ }); //  Cannot call `doTheThing` with object literal bound to `options` because inexact object literal [1] is incompatible with exact `Options` [2].
  </code></pre>
  <p>But I just want it to say &quot;pos&quot; is missing. The above is more complicated and just forces you to have to read the definition of <code>Options</code> in order to know what it takes. I want it to offer the actual missing property to you. Which it will do, as soon as I put any random thing in there:</p>
  <pre class="lang-js prettyprint-override"><code>doTheThing({ x: 10 }); //  Cannot call `doTheThing` with object literal bound to `options` because property `pos` is missing in object literal [1] but exists in `Options` 
  </code></pre>
  <p>Is there any way to get it to give me that error message on <code>{}</code>, instead of the less useful message? Ideally through some sort of extra annotation on the type and not some global flow configuration that like turns off unsealed objects or something.</p>