00014-easy-first

Back

type First<T extends any[]> = T extends []? never: T[0];

Solution by lephuthuc2001 #34697

// your answers
type First<T extends any[]> = T extends [infer First, ...infer Rest] ? First : never;

Solution by zeyuanHong0 #34672

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

Solution by nathan2slime #34655

type First<T extends any[]> = T extends [] ? never : T[0]

Solution by DevShinnThant #34541

type First<T extends readonly any[]> = T extends [infer First, ...infer Reset]  ? T[0] : never

Solution by JayoonKoo #34519

type First<T extends any[]> = T extends [] ? never : T[0]

Solution by Hailey0930 #34489

type First<T extends any[]> = T extends [] ? never : T[0];

Solution by ktim816 #34420

// your answers
type First<T extends any[]> = T extends [] ? never:  T[0]

Solution by gobielJonathan #34394

type First<T extends any[]> = T extends [] ? never : T[0];
type First<T extends any[]> = T['length'] extends 0 ? never : T[0];

Solution by znar #34384

type First<T extends any[]> = T extends [] ? never : T[0]

Solution by rookie-luochao #34357

本题解答:

export type First<T extends any[]> = T extends [infer first, ...any[]]? first: never;

以下是对不同的数组操作的TS实现:

//数组最后一个元素
export type Last<T extends any[]>=T extends [...any,infer L]?L:never;

//弹出数组最后一个元素(Pop)
export type Pop<T extends any[]>=T extends [...infer P,infer R]?P:never;

//向数组末尾添加一个元素(Push)
export type Push<T extends any[],U>=T extends [..T,U];

//弹出数组开头的元素(Shift)
export type Shift<T extends any[]>=T extends [infer F,...infer R]?R:never;

//将数组最后一个元素置于数组开头(Unshift)
export type Unshift<T extends any[],U>=[U,...T];

//连接两个数组(Concat)
export type Concat<T extends any[],V extends any[]>=[...T,...V];

//数组反转(Reverse)
export type Reverse<T extends any[]>=T extends [infer Head,...infer Rest]?[...Reverse<Rest>,Head]:T;

//过滤指定对象(FilterOut)
export type FilterOut<T extends any[],F>=T extends [infer First,...infer Rest]?(First extends F?FilterOut<Rest,F>:[First,...FilterOut<Rest,F>]):T;

说明:数组反转和过滤指定对象的实现都采用了递归的方式,以达到对数组中每个元素进行指定的操作。

Solution by wxh-cyber #34322

type First<T extends unknown[]> = T extends [infer R, ...unknown[]] ? R : never

Solution by souzaramon #34317

type First<T extends any[]> = T extends [] ? never : T[0]
or
type First<T extends any[]> = T[number] extends never ? never : T[0];

Solution by binhdv155127 #34313

注意,当为空数组时,返回类型为never会比为undefined更好。 结合之前的提交结果再补充几种写法:

// 写法一:采用extends []判断
type First<T extends any[]> = T extends [] ? never : T[0]

//写法二:通过T['length']获取到数组长度进行判断
type First<T extends any[]> = T['length'] extends 0 ? never : T[0]

//写法三:使用infer关键字
type First<T> = T extends [infer P, ...infer Rest] ? P : never

Solution by wxh-cyber #34292

type First<T extends any[]> = T extends [infer A, ...infer rest] ? A : never;

Solution by wxh-cyber #34280

// 你的答案

type First<T extends any[]> = T extends [infer A,...infer B]?A:never

Solution by W-fitTiger #34244

type First<T extends any[]> = T extends [] ? never : T[0]

Solution by bkdragon0228 #34241

type First<T extends readonly any[]> = T[0]

Solution by Fmanuel809 #34189

type First<T extends any[]> = T extends [arg: infer A, ...args: infer _] ? A : never

Solution by quitone #34182

type First<T extends any[]> = T['length'] extends 0 ? never : T[0];

Solution by ProvorovOleksii #34076

// 1차 --> infer 활용 할 생각 못 함. infer 활용하는 것을 보고 짜보기. --> 테스트코드 실패.
type First<T extends any[]> = T extends [infer F, ...any[]] ? F : null;

//2차  --> null이 아닌 never 넣어줘야 한다!! 조건이 맞지 않는 경우를 명확하게 하기 위함
type First<T extends any[]> = T extends [infer F, ...any[]] ? F : never;

Solution by leeeunji93 #34033

// 여기 풀이를 입력하세요
type First<T extends any[]> = T[0] extends T[number] ? T[0] : never;

Solution by LeeKangHyun #34022

// never 타입은 공집합 타입으로, 아무 값도 가질 수 없는 타입.
// 따라서, never[]는 아무 요소도 가질 수 없는 배열을 의미하며, 실질적으로는 빈 배열을 의미.
// 다음과 같이 쓸 수 있다. type Example<T> = T extends never[] ? 'EmptyArray' : 'NotEmptyArray';
// 하지만 []와 never[] 가 같은것은 아니다. []가 never[]의 슈퍼타입이다. ([]가 개념적으로 never[]더 넓은 범위를 포함. ex string이 string | number의 서브타입이다.)
type First<T extends any[]> = T extends [] ? never : T[0]

Solution by korkt-kim #34013

// answer1
type First<T extends any[]> = T extends [] ? never : T[0];

// answer2
type First<T extends any[]> = T extends [infer U, ...unknown[]] ? U : never;

// answer3
type First<T extends any[]> = T[number] extends never ? never : T[0];

Solution by dev-jaemin #33977

type First<T extends any[]> = T extends [infer first, ...unknown[]] ? first : never

Solution by ouzexi #33965

type First<T extends any[]> = T extends []? never:T[0]

Solution by hyojinLee-git #33945

type First<T extends any[]> = T extends [infer A, ...infer rest] ? A : never

Solution by leejunhui #33825


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


Solution by iam1maker #33770

type First<T extends any[]> = T extends [] ? never : T[0]

Solution by veralex #33746

type First<T extends any[]> = T extends [] ? never : T[0];

Solution by ckdwns9121 #33737