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