¿Cómo puedo extender una interfaz de TypeScript e inferir los argumentos?
Tengo una interfaz.
interface Actions {
onSearchByAddress: (s: State, p: string) => State
onSetSalesType: (s: State, p: string[]) => State
}
Quiero generar otra interfaz (o tipo) con los mismos nombres de funciones, pero con una firma de función diferente.
La firma de la función debe aceptar el segundo argumento como el primero y retornar void.
interface ConnectedActions {
onSearchByAddress: (p: string) => void
onSetSalesType: (p: string[]) => void
}
En este momento estoy atrapado aquí
type ConnectedActions = {
[P in keyof Actions]: Actions[P]
}
Respuesta #1
Probablemente quieras usar un tipo condicional dentro de tu tipo mapeado para inferir el segundo parámetro de cada propiedad de función, así:
type ConnectedActions = {
[P in keyof Actions]: (
Actions[P] extends (s: State, y: infer Y) => State ? (p: Y) => void : never
)
}
Ese tipo es equivalente a
type ConnectedActions = {
onSearchByAddress: (p: string) => void;
onSetSalesType: (p: string[]) => void;
}
que es lo que estás buscando. Espero que eso ayude; buena suerte.
