title: Keyof inferring string | number when key is only a string
body: <p>I define an <code>AbstractModel</code> like so:</p>
  
  <pre><code>export interface AbstractModel {
     [key: string]: any
  }
  </code></pre>
  
  <p>Then I declare the type <code>Keys</code>:</p>
  
  <pre><code>export type Keys = keyof AbstractModel;
  </code></pre>
  
  <p>I would expect that anything with the Keys type would be interpreted univocally as a string, for example:</p>
  
  <pre><code>const test: Keys;
  test.toLowercase(); // Error: Property 'toLowerCase' does not exist on type 'string | number'. Property 'toLowerCase' does not exist on type 'number'.
  </code></pre>
  
  <p>Is this a bug of Typescript (2.9.2), or am I missing something?</p>