title: How to 'map' a Tuple to another Tuple type in Typescript 3.0
body: <p>I have tuple of <code>Maybe</code> types:</p>
  
  <pre><code>class Maybe&lt;T&gt;{ }
  
  type MaybeTuple = [Maybe&lt;string&gt;, Maybe&lt;number&gt;, Maybe&lt;boolean&gt;];
  </code></pre>
  
  <p>and I want to turn this into a tuple of types:</p>
  
  <p><code>type TupleIWant = [string, number, boolean];</code></p>
  
  <p>so I tried this:</p>
  
  <pre><code>type ExtractTypes&lt;T&gt; = T extends Maybe&lt;infer MaybeTypes&gt;[] ? MaybeTypes : never;
  
  type TypesArray = ExtractTypes&lt;MaybeTuple&gt;; // string | number | boolean NOT [string, number, boolean]
  </code></pre>
  
  <p>Which doesn't work :-(</p>
  
  <p>I get <code>(string | number | boolean)[]</code> rather than the tuple I want: <code>[string, number, boolean]</code></p>
  
  <p>Is what I want to do currently possible?</p>