title: Adding keys to an interface based on value?
body: <h2>Scenario</h2>
  <p>My scenario here is that I have two classes, the first is a rough ObservableStore class and another base class that could have some values passed to it that are ObservableStore-s.</p>
  <pre><code>class ObservableStore&lt;T&gt; {
    update(value: (current: T) =&gt; T): void;
    subscribe(fn: (current: T) =&gt; void): void;
  }
  
  class OtherClass&lt;Props extends {} = {}&gt; {
    constructor(private props: Props) {
      for(let [key, value] of Object.entries(props)) {
        if(value instanceof ObservableStore) value.subscribe($data =&gt; this[`$${key}`] = $data);
      }
    }
  }
  
  const someInstance = new OtherClass({ someStore: new ObservableStore&lt;string[]&gt;([]) });
  </code></pre>
  <h2>Question</h2>
  <p>Is there anyway to use types to add the <code>$someStore</code> value onto the <code>this.props</code>, or is this not currently possible?</p>