title: Missing attributes from type failes silently in Typescript
body: <h2>Problem</h2>
  <p>I have created an IEntity interface that all objects in the client application are derived from. This has attributes that are dictated by the .Net Core API.</p>
  <p>When the client creates a new object locally, it doesn't have these attributes, so it needs them removed. I've tried to do it using the <code>IDraft&lt;T&gt;</code> interface.</p>
  <p>The problem is that Typescript and ESLint don't seem to care that the object I've created doesn't match the type <code>IDraft&lt;IPerson&gt;</code>.</p>
  <h2>Code</h2>
  <pre><code>export abstract interface IEntity {
    // ID: A UUID for the entity.
    readonly id: string;
    // Date created.
    readonly createdAt: Date;
    // Date modified.
    readonly modifiedAt: Date;
  }
  
  //
  // IDraft - A local-only draft of type of Entity.
  //
  // Strips IEntity attributes from the generic interface `T`.
  //
  export abstract interface IDraft&lt;T&gt;
    extends Omit&lt;T, 'id' | 'createdAt' | 'modifiedAt'&gt; {}
  
  </code></pre>
  <pre><code>import { IEntity } from '../global.types';
  
  type PersonType = 'applicant' | 'admin' | 'clientuser';
  
  export interface IPerson extends Required&lt;IEntity&gt; {
    firstName: string;
    familyName?: string;
    email: string;
    type: PersonType;
  }
  </code></pre>
  <pre><code>const newPerson: IDraft&lt;IPerson&gt; = {
          // Missing id
          firstName: 'Bruce',
          email: 'test@test',
      } as IDraft&lt;IPerson&gt;;
  </code></pre>
  <h2>Expected behaviour</h2>
  <ul>
  <li>Typescript throws an error because <code>newPerson</code> does not match <code>IDraft&lt;IPerson&gt;</code>.</li>
  </ul>
  <h2>Actual behaviour</h2>
  <ul>
  <li>Typescript does not produce an error, making the type useless.</li>
  </ul>