Typescript: универсальный тип функции, преобразующий все параметры функции - PullRequest
2 голосов
/ 09 октября 2019

В моем проекте я использую универсальный тип с именем Data<X>, который преобразует данный тип X определенным образом.

СейчасЯ хочу создать универсальный тип функции DataFunction<F extends Function>, охватывающий все параметры F в Data<Parameter>.

ДляНапример, я хочу, чтобы

DataFunction<(a: Type1, b: Type2) => ReturnType>

приводил к

(a: Data<Type1>, b: Data<Type2>) => ReturnType

Я сделал это для преобразования известного числа параметров, здесь обертывание первого параметра в Data<Parameter>, оставив следующие без изменений:

type DataFunction<T extends (arg0: any, ...args: any[]) => any>  
    = T extends (arg0: infer A, ...args: infer P) => infer R  
        ? (arg0: Data<A>, ...args: P) => R  
        : any;

Мой вопрос, как я могу также обернуть все следующие параметры в Data<Paramter>? Я хочу что-то вроде этого, которое не работает:

type DataFunction<T extends (arg0: any, ...args: any[]) => any>  
    = T extends (arg0: infer A, ...args: [infer P]) => infer R  
    ? (arg0: Data<A>, ...args: [Data<P>]) => R 
    : any;

1 Ответ

2 голосов
/ 09 октября 2019

Это похоже на работу:

type DataFunction<F> = F extends (...args: infer A) => infer R
  ? (...args: { [K in keyof A]: Data<A[K]> }) => R
  : any;

PG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...