Update: based on @jerico's answer below The following type alias will return the type of the elements in an array or tuple: type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never; So these examples would work: type A = ArrayElement<string[]>; // string type B = ArrayElement<readonly string[]>; // string type C = ArrayElement