函数 return 类型基于作为参数传递的数组元素
Function return type based on the elements of array passed as an argument
我正在尝试找到一种方法来创建 return 类型取决于作为参数传递的数组元素的函数
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
类似的东西但实际上有效
function func<T>(array: T): {[K in typeof array[number]]: any}
太近了!
function func<A extends ReadonlyArray<string>>(array: A): { [K in A[number]]: any } { ... }
A[number]
将为我们提供其中所有字符串的并集,然后我们可以对其进行映射。
您可以将此处的泛型视为将 array
的类型“保留”到 return 类型,以便我们可以使用它。
我正在尝试找到一种方法来创建 return 类型取决于作为参数传递的数组元素的函数
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
类似的东西但实际上有效
function func<T>(array: T): {[K in typeof array[number]]: any}
太近了!
function func<A extends ReadonlyArray<string>>(array: A): { [K in A[number]]: any } { ... }
A[number]
将为我们提供其中所有字符串的并集,然后我们可以对其进行映射。
您可以将此处的泛型视为将 array
的类型“保留”到 return 类型,以便我们可以使用它。