title: How to correctly implement a decorator interface to an overloaded class
body: <p>I want to extend class <code>UserStore implements IUserStore</code> with a decorator, <code>@asyncStore</code>. <code>IUserStore</code> is an interface that extends <code>IAsyncStore</code>. TypeScript is however complaining that I'm not correctly implementing <code>AsyncStore</code> in class <code>UserStore</code>.</p>
  
  <p>The full error:</p>
  
  <pre><code>TS2420: Class 'UserStore' incorrectly implements interface 'IUserStore'.
  Property 'isLoading' is missing in type 'UserStore'
  </code></pre>
  
  <p>How do I correctly type everything so that my <code>UserStore</code> is correctly typed?</p>
  
  <p>Here are some snippets of my code (left out irrelevant code and left interfaces empty if not related to this problem or error):</p>
  
  <pre><code>// Types
  interface IAsyncStore {
    isLoading: boolean;
  }
  
  interface IUserStore extends IAsyncStore {}
  
  // AsyncStore.ts
  function asyncStore(constructor): any {
    class AsyncStore extends constructor implements IAsyncStore {
      private loading: boolean = false;
  
      public get isLoading(): boolean {
        return this.loading;
      }
    }
  
    return AsyncStore
  }
  
  // UserStore.ts
  @asyncStore
  class UserStore implements IUserStore {} // Error TS2420: ...
  </code></pre>