Например, у меня есть какой-то объект с функциями
{
fnNumber: (x: number) => x,
fnString: (x: string) => x
}
, и я хочу создать этот тип
{
fnNumber: number,
fnString: string
}
Я могу сделать это так
type FnParam<T> = {[key in keyof T ]: T[key]}
type FnObject<T> = {[key in keyof T]: (x: T[key]) => any}
export function create<T>(x: FnObject<T>): FnParam<T> {
return {} as any
}
const types = create({
fnNumber: (x: number) => x,
fnString: (x: string) => x
})
types: : {fnNumber: number, fnString: string}
Но если функции имеют более одного параметра
{
fnNumber: (x: number, y: string) => x,
fnString: (x: string) => x
}
Мне нужно создать кортежи
{
fnNumber: [number, string],
fnString: [string]
}
Примерно так
type FnParam2<T> = {[key in keyof T ]: T[key]}
type FnObject2<T> = {[key in keyof T]: (...x: T[key]) => any}
export function create2<T>(x: FnObject2<T>): FnParam2<T> {
return {} as any
}
Но машинопись не может вывести кортеж из...x: T[key]
Возможно ли это?