以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - TypeScript 类型谜题
31. implement Push<T, I>

type Push<T extends any[], I> = [...T, I] extends infer R ? { [K in keyof R]: K extends keyof T ? R[K] : never } : never;

type A = Push<[1,2,3], 4> // [1, 2, 3, 4]
type B = Push<[1], 2> // [1, 2]
type C = Push<[], string> // [string]

注: Push 类型接受两个参数:T 类型是某个数组类型,I 类型是要被添加进数组中的元素的类型。 该类型通过使用 infer R 来获取添加了元素 I 后的新数组类型,然后将新数组类型中索引为 keyof R 的部分继承到最终返回的类型中,以确保只返回新添加的部分。