00016-medium-pop

Back

// 你的答案
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

// your answers
type arrThree = ["a", "b", "c", "d"];
type arrFour = [3, 2, 1];

type Pop<T extends unknown[]> = T extends [...infer Pending, infer Last] ? Pending : never;

const re1: Pop<arrThree> = ["a", "b", "c"]; // expected to be ['a', 'b', 'c']
const re2: Pop<arrFour> = [3, 2]; // expected to be [3, 2]

Solution by Sathiyapramod #35455

type Pop<T extends any[]> = T extends [] 
  ? [] 
  : T extends [...infer Rest, any] 
    ? Rest 
    : never

Solution by eunsukimme #35123

type Pop<T extends any[]> = T extends [...infer F, infer L] ? [...F] : never;

Solution by raeyoung-kim #35001

type Pop<T extends any[]> = T extends never[] ? [] : T extends [...infer R, any] ? R: never

Solution by 56aiden90 #34956

// your answers
type Pop<T extends any[]> = T extends [...infer P, any] ? P : T;

Solution by zeyuanHong0 #34803