2017-06-16 5 views
3

J'ai une interface qui ressemble à ceciComment puis-je appliquer une interface à une fonction de rappel anonyme dactylographiée

interface CallBackHandler{ 
(err: Error, response: {statusCode: number, body: object}):void 
} 

et je veux appliquer cette interface au rappel de ce

request({ 
    url: url, 
    method: "GET", 
    withCredentials: false, 
    json: true, 
    headers: headers 
    }, (err, response) => { 
    this.handleResponse(err, response, resolve, reject); 
    }); 

mais j'obtiens une erreur disant que la fonction doit retourner quelque chose si le type de retour n'est pas vide quand j'ajoute l'interface

(err, response): CallBackHandler => { 
    this.handleResponse(err, response, resolve, reject); 
    } 

quelle est la bonne façon d'appliquer cette interface?

Répondre

0

Vous pouvez avoir quelque chose comme

request({ 
    url: url, 
    method: "GET", 
    withCredentials: false, 
    json: true, 
    headers: headers 
}, (err: Error, response: {statusCode: number, body: object}) => { 
    this.handleResponse(err, response, resolve, reject); 
}); 
1

Si request() a déjà la signature de type:

function request(options, callback: CallBackHandler) { 
    ... 
} 

vous ne devriez pas besoin de faire quoi que ce soit, comme le rappel que vous fournissez seront type- vérifié en conséquence.

Si cette fonction ne pas ont déjà la signature de type, et que vous voulez lancer manuellement votre rappel à CallBackHandler, alors vous aurez besoin d'envelopper la fonction de rappel entre parenthèses et lancer cette expression, comme suit:

request({ 
    ...etc 
}, ((err, response) => { 
    this.handleResponse(err, response, resolve, reject); 
}) as CallBackHandler);