// ============= Test Cases =============
import type { Equal, Expect } from './test-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' }>,
]

// ============= Your Code Here =============
type First<T extends any[]> = T extends [] ? never: T[0];
// usage
type arr = [1,2,3,4];
type FirstOne = First<arr>;
// FirstOne ===> 1

此处两个trick

一个是前置的依赖使其通过 expect error

一个是T[0]直接用索引获取首个元素