Дублируйте тип функции без первого аргумента - PullRequest
1 голос
/ 14 июля 2020

Ситуация

Сейчас у меня есть функция с сигнатурой

type func1= (context: ActionContext<ModuleState, RootState>, id: string): Promise<void>

У меня много функций, которые выглядят примерно как

type commonType = (context: ActionContext<SomeState, RootState>, arg2: arg2Type, arg3?: arg3Type, etc...): Promise<returnType>;

Где SomeState, arg*Type и returnType может быть любым

Что я хочу

Мне нужен способ взять функцию вроде func1 и экспортировать тип с удаленным context. Итак,

export type exportedFunc1Type = (id: string) => Promise<void>

И для экспорта аналогичных типов для других аналогичных функций.

Попыток

Моя первая попытка была сделать

export type ActionType<A extends (context: ActionContext<any, RootState>, ...args) => any > =
  Parameters<A>.slice(1) => ReturnType<A>;

Но это не работает по двум причинам:

  1. Parameters.slice (1) недействителен. Вопрос: Как я могу использовать операции с массивами помимо c [n] «массивов типов»?

  2. Даже если 1. была решена, синтаксис [a,b] => C недопустим. Очевидно, это должно быть (a,b)=>C. Вопрос: Как мне преобразовать [a: typeA, b: TypeB] в (a: typeA, b: TypeB)=>C

После того, как я получу этот кодовый блок, я могу сделать

export type exportedFunc1Type = ActionType<typeof func1>
...