title: Can you make two versions of an interface, one with all optional and one with all required fields, while staying DRY?
body: <p>I have an interface called <code>IPreferences</code>. It looks like this:</p>
  
  <pre><code>export interface IPreferences { 
      genres: Genres[],
      singers: Singer[],
      volume: number
  }
  </code></pre>
  
  <p>Since I allow the user to update his preferences and only update one or more fields, I created an interface <code>IPreferenceUpdateRequest</code> that looks like </p>
  
  <pre><code>export interface IPreferencesUpdateRequest { 
      genres?: Genres[],
      singers?: Singer[],
      volume?: number
  }
  </code></pre>
  
  <p>But this is bad because I now have two nearly identical interfaces.</p>
  
  <p>Is there anyway for me to do this but stay <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow noreferrer">DRY</a> ?</p>