title: Are the types `{ [key in string]: boolean };` and `{ [key : string]: boolean };` equivalent?
body: <p>In <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/blob/74703a87eb03dc98918016fefb85a1592ab4afed/types/react-select/src/Select.d.ts#L53" rel="noreferrer">react-select</a> I stumbled across the line</p>
  
  <pre class="lang-js prettyprint-override"><code>export type SelectComponentsProps = { [key in string]: any };
  </code></pre>
  
  <p>I know from
  <a href="https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types" rel="noreferrer">here</a>
  that</p>
  
  <pre class="lang-js prettyprint-override"><code>type Keys = 'option1' | 'option2';
  type Flags = { [K in Keys]: boolean };
  </code></pre>
  
  <p>is equivalent to</p>
  
  <pre class="lang-js prettyprint-override"><code>type Flags = {
      option1: boolean;
      option2: boolean;
  }
  </code></pre>
  
  <p>I also know from
  <a href="https://stackoverflow.com/questions/43396522/what-does-the-type-key-string-boolean-mean">here</a>
  that <code>{ [key: string]: boolean; };</code> will be satisfied by this:</p>
  
  <pre class="lang-js prettyprint-override"><code>let map : { [key: string]: boolean} = {};
  map["foo"] = true;
  map["bar"] = false;
  map["foobar"] = "foo"; // Throws exception
  map[1] = true; // Curiously doesn't throws exception
  map.foo = true; // Throws exception
  </code></pre>
  
  <p>So, is <code>{ [key in string]: boolean };</code> equivalent to <code>{ [key : string]: boolean };</code>?</p>
  
  <p>If not, what does <code>{ [key in string]: boolean };</code> mean?</p>