// your answers
type First<T extends any[]> = T extends {length: 0} ? never : T[0];
Solution by IAJos #38230
// your answers
Solution by Kotkoa #38218
// your answers
Solution by Kotkoa #38217
// your answers
type First<T extends any[]> = T[number] extends never ? never : T[0]
Solution by Kyujenius #38197
// 你的答案
type First<T extends unknown[]> = T extends [infer Head, ...unknown[]] ? Head : never;
Solution by sacter #38186
// your answers
type First<T extends any[]> = T extends [] ? never : T[0]
Solution by nirrie #38171
type First<T extends any[]> = T extends [] ? never : T[0]
// type First<T extends any[]> = T extends [infer F, ...infer _] ? F : never
Solution by Tofu-Xx #38117
Here is my stupid answer to challenge 14.
type First<T extends any[]> = T["length"] extends 0 ? never : T[0]
Solution by m-i-z-u-k-i #38081
type myUnionTypeArray = (number | string | symbol | object | Function | undefined );
type getFirstArrayVal<T extends readonly myUnionTypeArray[]> = T extends [infer Head, ...myUnionTypeArray[]] ? Head : never;
type First<T extends readonly myUnionTypeArray[]> = getFirstArrayVal<T>
Here I'm restricting the union types and then using infer to get the first character , here Head is my first character and ...myUnionTypeArray[] consists the rest of the values.
Solution by mainakgupta33 #38067
type First<T extends any[]> = T extends [] ? never : T[0]
Solution by Charlotte-n #38063
type TupleToObject<T extends readonly (string | number | symbol)[]> = {
[k in T[number]]: k;
};
Solution by ahm4dd #38045
type IsArrayEmpty<T extends any[]> = T['length'] extends 0 ? true : false
type First<T extends any[]> = IsArrayEmpty<T> extends true ? never : T[0];
Solution by Nikita0x #38023
// your answers
type First<T extends any[]> = T extends [] ? never : T[0];
Solution by Maleeran #38016
type First<T extends unknown[]> = T extends [infer P, ...unknown[]] ? P : never;
Solution by seungjae0619 #37986
// your answers
type First<T extends any[]> = T[0];
Solution by istamal #37886
type First<T extends unknown[]> = T[0];
Solution by ClarityOfMind #37875
type First<T extends any[]> = ReturnType<T[number]> extends never ? never : T[0]
Solution by tuannvnguyen #37870
type First<T extends unknown[]> = T extends [] ? never : T[0];
Solution by Hansol46 #37831
type First<T extends unknown[]> = T[0];
Solution by pkutsenko #37821
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type First<T> = T extends arr1 ? arr1[0] : arr2[0]
type head1 = First<arr1> // expected to be 'a'
type head2 = First<arr2> // expected to be 3
Solution by webdevproformation #37816
type First<T extends any[]> = T extends [infer P, ...infer R] ? P : never
type First1<T extends any[]> = T extends [] ? never : T[0]
type First2<T extends any[]> = T['length'] extends 0 ? never : T[0]
Solution by LovePlayCode #37795
// 你的答案
type First<T extends any[]> = T extends [infer P, ...any[]] ? P : never // 使用类型推导infer
Solution by dong-hx #37785
// your answers
Solution by Brahima-Fofana #37758
type First<T extends any[]> = T extends [] ? never : T[0]
Solution by ExceptAnyone #37690
type First<T extends any[]> = T extends [] ? never: T[0]
Solution by ortima #37686
type First<T extends any[]> = T extends [] ? never : T[0];
type First<T extends any[]> = T['length'] extends 0 ? never : T[0]
type First<T extends any[]> = T extends [infer First, ...any] ? First : never
/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<First<[3, 2, 1]>, 3>>,
Expect<Equal<First<[() => 123, { a: string }]>, () => 123>>,
Expect<Equal<First<[]>, never>>,
Expect<Equal<First<[undefined]>, undefined>>,
]
type errors = [
// @ts-expect-error
First<'notArray'>,
// @ts-expect-error
First<{ 0: 'arrayLike' }>,
]
Solution by PosionEdgar #37678
// your answers
type First<T extends any[]> = T["length"] extends 0 ? never : T[0];
Solution by AlexanderNP #37647
type First<T extends any[]> = T extends [infer F, ...any[]] ? F : never;
Solution by BernTheSeal #37632
type First<T extends any[]> = T extends [infer P, ...any[]] ? P : never;
Solution by tomo-local #37575