Lime logo洛明Lime
← 返回卡片墙幼苗速查表

Array[0]

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 A, ...infer rest] ? A : never
type First<T extends any[]> = T[number] extends never ? never : T[0]
type First<T extends any[]> = '0' extends keyof T ? T[0] : never

why doesn’t this work

T extends readonly Array<unknown>

but this works

T extends readonly unknown[]

this also works

T extends Readonly<Array<unknown>>

Are they not all the same thing?

readonly type modifier is only permitted on array and tuple literal types. readonly 类型修饰符仅允许用于 array 或 tuple 字面量类型。

unknown[] 是一个具体的字面量类型可以使用 readonly 修饰,Array<> 表示使用 Array 构造函数构造的数组类型。