// ============= 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]直接用索引获取首个元素