00014-easy-first

Back

// 你的答案

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

Solution by insvaia #38233

// 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