Search code examples
typescripttuplestypescript-genericsunion-typesmapped-types

How to convert a tuple type to a union?


How to map a tuple generic type to a union type?

type NeededUnionType<T> = T[keyof T]; // Includes all the Array properties values
  
const value: NeededUnionType<[7, string]> = 2; // This should not be allowed (2 is the tuple length)

Expected type: 7 | string


Solution

  • You can index by number instead of keyof T. keyof T will contain all keys of the tuple object which includes the length as well as any other array properties.

    type NeededUnionType<T extends any[]> = T[number]; // Includes all the Array properties values
    
    const value: NeededUnionType<[7, string]> = 2; // err value is 7 | string 
    
    

    Playground Link