title: Push type to the end of the tuple
body: <p>I can add element to the begining of the tuple, or remove it from there</p>
  
  <pre><code>type ShiftTuple&lt;T extends any[]&gt; = ((...t: T) =&gt; void) extends ((x: infer X, ...r: infer R) =&gt; void) ? R : never;
  type UnshiftTuple&lt;X, T extends any[]&gt; = ((x: X, ...t: T) =&gt; void) extends ((...r: infer R) =&gt; void) ? R : never;
  </code></pre>
  
  <p>But I have difficulties with doing the same things with the last element instead of the first.</p>
  
  <p>Even if I write the function</p>
  
  <pre><code>function f&lt;X, Z extends any[]&gt;(x: X, ...args: Z) {
    return [...args, x]
  }
  </code></pre>
  
  <p>typescript <a href="https://www.typescriptlang.org/play/?ts=3.1.6&amp;ssl=1&amp;ssc=1&amp;pln=5&amp;pc=43#code/GYVwdgxgLglg9mABMAPADQDSIFqIKYAeUeYAJgM6ICGYAngNoC6AfABQEBcimiAdP1QBOAc3JdsASkQBvALAAoRIkF4oIQUnr9eQ0VgKMFAXwUKAbkMQFEAXmSsAjNUoOsAJmeI3WAMyefWAAsnoESANxAA" rel="noreferrer">says</a> it returns <code>any[]</code>.</p>
  
  <p>Is there a way to push new type into the end of the tuple like (insupported)</p>
  
  <pre><code>export type PushTuple&lt;T extends any[], X&gt; = [...T, X];
  </code></pre>