我可以在元组的开头添加元素,或者从那里删除它
type ShiftTuple<T extends any[]> = ((...t: T) => void) extends ((x: infer X, ...r: infer R) => void) ? R : never;
type UnshiftTuple<X, T extends any[]> = ((x: X, ...t: T) => void) extends ((...r: infer R) => void) ? R : never;
Run Code Online (Sandbox Code Playgroud)
但是我很难用最后一个元素而不是第一个元素做同样的事情。
即使我写了函数
function f<X, Z extends any[]>(x: X, ...args: Z) {
return [...args, x]
}
Run Code Online (Sandbox Code Playgroud)
打字稿说它返回any[].
有没有办法将新类型推入元组的末尾(不支持)
export type PushTuple<T extends any[], X> = [...T, X];
Run Code Online (Sandbox Code Playgroud)