'Function return type based on the elements of array passed as an argument
I'm trying to find a way to create function which return type depends on the elements of array passed as an argument
const arr1 = ['a', 'b'] as const
const arr2 = ['a', 'c'] as const
func(arr1) // return type {a: any, b: any}
func(arr1).a // ok
func(arr1).b // ok
func(arr1).c // TYPE ERROR
func(arr2) // return type {a: any, c: any}
func(arr2).a // ok
func(arr2).b // TYPE ERROR
func(arr2).c // ok
So something like that but actually working
function func<T>(array: T): {[K in typeof array[number]]: any}
Solution 1:[1]
So close!
function func<A extends ReadonlyArray<string>>(array: A): { [K in A[number]]: any } { ... }
A[number] will give us a union of all the strings inside it, and then we can map over that.
You can think of the generic here as a "retaining" the type of array over to the return type so we can use it.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | hittingonme |
