title: TypeScript type not working with spread operator
body: <p>I have a redux style reducer (I'm using ngrx) that is returning a specific type. When I use the spread operator in my return object, the typescript linter is not catching invalid properties.</p>
  
  <p>Here is my interface:</p>
  
  <pre><code>interface MyState {
      firstName: string;
      lastName: string;
      age: number;
  }
  </code></pre>
  
  <p>Here is my reducer. <code>Action</code> is an ngrx action:</p>
  
  <pre><code>function reducer(state = initialState, action: Action): MyState {
      switch (action.type) {
          case Actions.COOL_ACTION:
              return {
                  ...state,
                  propertyDoesNotExist: action.payload, // &lt;- no error
              };
          default:
              return state;
      }
  }
  </code></pre>
  
  <p>I would expect that <code>propertyDoesNotExist</code> would be flagged, but it is not. I've tried casting <code>&lt;CalendarState&gt;</code> the return object, the state property <code>...(&lt;CalendarState&gt;state)</code> and using the <code>as</code> alias, but it doesn't help.</p>
  
  <p>It's like the spread operator messes up the types.</p>