/* _____________ 你的代码 _____________ */
/**
* 先按照正常逻辑来思考,然后从 TS 实现的角度去实现这个
*/
type Pop<T extends any[]> = T extends [...infer U,infer _] ? U : T
Solution by LovePlayCode #37880
type Pop<T extends any[]> = T extends [] ? [] : T extends [...infer ArrayPop, infer Last] ? ArrayPop : never;
Solution by AlexanderNP #37854
type Pop<T extends any[]> = T extends [...infer Rest, infer Last] ? Rest : []
Solution by rauf322 #37727
type Pop<T extends any[]> = T extends [...infer R, any] ? R : never;
Solution by jjojae9393 #37625
// your answers
type Pop<T extends any[]> = T extends [...infer _, infer Last] ? _ : []
Solution by PAVANT009 #37613
// 你的答案
type Pop<T extends any[]> = T extends [...infer Ahead, infer Last] ? Ahead : []
type Shift<T extends any[]> = T extends [infer First, ...infer Rest] ? Rest : []
type Push<T extends any[], K> = [...T, K]
type Unshift<T extends any[], K> = [K, ...T]
Solution by lToBContinued #37520
type arr1 = ['a', 'b', 'c', 'd']
type arr2 = [3, 2, 1]
type re1 = Pop<arr1> // expected to be ['a', 'b', 'c']
type re2 = Pop<arr2> // expected to be [3, 2]
type Pop<T extends any[]> = T extends [...T, infer U] ? U : never;
Solution by Nakamura25257 #37470
type Pop<T extends any[]> = T extends []
? []
: T extends [...infer Rest, infer Last]
? Rest
: never;
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Pop<[3, 2, 1]>, [3, 2]>>,
Expect<Equal<Pop<['a', 'b', 'c', 'd']>, ['a', 'b', 'c']>>,
Expect<Equal<Pop<[]>, []>>,
]
Solution by AnastasiaSv #37437
解决空数组不满足匹配条件的情况
Expect<Equal<Pop<[]>, []>>
type Pop<T extends any[]> = T extends []
? []
: T extends [...infer R, infer _]
? R
: never
Solution by hayden-fr #37295
type Pop<T extends any[]> = T extends [ ...infer I, infer _ ] ? [ ...I ] : []
Solution by drunksweet #37271
type Pop<T extends Array<unknown>> = T extends [...infer R, infer L] ? R : never
Solution by Divcutu #37259
type Pop<T extends any[]> = T extends [...infer U, infer _] ? U : T;
或者最后一项使用 unknown 代替
type Pop<T extends any[]> = T extends [...infer U, unknown] ? U : T;
Solution by djdidi #37148
type Pop<T extends any[]> = T extends [...infer F, infer R] ? F : []
Solution by 359Steve #37031
type Pop<T extends any[]> = T extends []?T:T extends [...infer Rest,infer Last]?Rest:T
Solution by Zhangzhangks #37022
// your answers
type Pop<T extends any[]> = T extends [...infer All, infer _] ? All : [];
Solution by AlexBraunMagic #36903
type Pop<T extends any[]> = T extends [...infer R, any] ? R : [];
Solution by Da-Sheng #36895
// 여기 풀이를 입력하세요
type Pop<T extends any[]> = T extends [...infer R, any] ? R : T extends [] ? T : never
Solution by seungdeok #36748
type Pop<T extends any[]> = T extends [] ? [] : T extends [...infer L, infer A] ? L : never
Solution by tungulin #36728
// your answers
type Pop<T extends any[] , ResultArray extends any[] =[]> = T['length'] extends 0 ? T : T extends [infer First,...infer Rest] ? [...Rest]['length'] extends 1 ? [...ResultArray,First] : Pop<[...Rest],[...ResultArray,First]> : never
Suggestions are welcomed🎉 🎉 🎉
Solution by SubramaniyanTN #36678
type Pop<T extends unknown[]> = T extends [...infer U, unknown] ? U : never
Solution by ChuSeongJun #36666
// 你的答案
type Pop<T extends any[]> = T extends [...infer R ,_:infer Last] ? R : []
Solution by zhaohuaishuai #36646
type Pop<T extends any[]> = T extends [...infer Rest, any] ? Rest : never
type Shift<T extends any[]> = T extends [any, ...infer Rest] ? Rest : never
type Push<T extends any[], U> = [...T, U]
type Unshift<T extends any[], U> = [U, ...T]
Solution by ChemieAi #36566
type Pop<T extends any[]> = T extends [... infer P,infer L] ? P : []
Solution by tac-tac-go #36451
type Pop<T extends any[]> = T extends [...infer R,infer U] ? R : [];
Solution by gakki-san #36444
type Pop<T extends any[]> = T extends [...infer Rest, any] ? Rest : never
Solution by asylbekduldiev #36426
type Pop<T extends any[]> = T extends [...infer R, infer _] ? R : [];
Solution by AleksandrShcherbackov #36164
type Pop<T extends any[]> = T extends [...infer I, infer _] ? I : []
type Shift<T extends any[]> = T extends [infer First, ...infer _] ? First : never
type Push<T extends any[],J extends any> = [...T,J]
type UnShift<T extends any[],J extends any> = [J,...T]
Solution by EvilEl #35841
type Pop<T extends any[]> = T extends [...infer S, any] ? S : [];
Solution by TroyB95 #35747
type Pop<T extends any[]> = T extends [...infer F, unknown] ? F : [];
Solution by gangnamssal #35556
type Pop<T extends unknown[]> = T extends [...infer U, unknown] ? U : [];
Solution by RanungPark #35482