Búsqueda de sitios web

typescript - X podría ser instanciado con un tipo arbitrario que podría no estar relacionado con Y


X podría ser instanciado con un tipo arbitrario que podría no estar relacionado con Y

Parece que TS no me permite hacer exactamente lo que quiero hacer. Básicamente, tengo un objeto/clase que tiene un método "call" que simplemente devuelve algún tipo de objeto de configuración para hacer llamadas a la API.

La propiedad "Request" es un método que devuelve la promesa en sí misma (una llamada a la API), mientras que "payloadHandler" debería recibir la respuesta de la solicitud y hacer lo que sea con ella. Eso significa que sí, el payload podría estar en cualquier forma o formato, lo cual a TypeScript no le gusta y no puedo encontrar una manera de inferir el tipo de respuesta a partir de la solicitud tipada.

Además, debería mencionar por si acaso: no puedo agregar parámetros de tipo a la interfaz Entity, es una clase externa que solo estoy ampliando en mi caso real.

type CallDescriptor<Response> = {
    request: () => Promise<Response>
    payloadHandler(payload: Response): void
};
    
interface Entity {
    call: <Response>() => CallDescriptor<Response>
}
    
const entity: Entity = {
    // 'Response' could be instantiated with an arbitrary type which could be unrelated to 'number'
    call() {
        return {
            request: () => new Promise<number>((res, rej) => res(1)),
            payloadHandler(payload) {
                // payload has to infer type from request's promise's resolve type
                console.log(payload)
            }
        }
    }
}