Ситуация
Сейчас у меня есть функция с сигнатурой
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>;
Но это не работает по двум причинам:
Parameters.slice (1) недействителен. Вопрос: Как я могу использовать операции с массивами помимо c [n]
«массивов типов»?
Даже если 1. была решена, синтаксис [a,b] => C
недопустим. Очевидно, это должно быть (a,b)=>C
. Вопрос: Как мне преобразовать [a: typeA, b: TypeB]
в (a: typeA, b: TypeB)=>C
После того, как я получу этот кодовый блок, я могу сделать
export type exportedFunc1Type = ActionType<typeof func1>