title: Sub interface that may contain properties of parent interface?
body: <p>I'm attempting to create a generic store class that has the ability to take in a partial of the generic type and merge it with the stored type.</p>
  <pre><code>  async merge(model: any): Promise&lt;TModel | null&gt; {
      const current = await this.providerGet();
      return await this.set({
        ...current,
        ...model
      });
    }
  </code></pre>
  <p>The problem i'm encountering is that i can't mark my <code>model</code> as <code>:TModel</code> because anywhere <code>merge({})</code> is used is now complaining about absent properties.</p>
  <p>Is there a way to say that <code>model:any</code> can be an object that <em>may</em> contain 1 or more of the properties of <code>TModel</code> and still prevent it from allowing things that are not present in <code>TModel</code>?</p>