Quel est le type de fichier d'enregistrement de la valeur de retour doit-je utiliser pour un $http appel qui renvoie rien d'autre que le succès?
J'ai créé un service à l'aide de la Machine:
class ConfigService implements IConfigService {
public admin = {};
public adminBackup = {};
public user = {};
public loaded = false;
constructor(
private $http: ng.IHttpService,
private $q: ng.IQService
) {
}
static $inject = [
'$http',
'$q'
];
put = ():ng.IHttpPromise<> => {
var defer = this.$q.defer();
if (angular.equals(this.admin, this.adminBackup)) {
return defer.resolve();
} else {
this.$http({
data: {
adminJSON: JSON.stringify(this.admin),
userJSON: JSON.stringify(this.user)
},
url: '/api/Config/Put',
method: "PUT"
})
.success(function (data) {
this.adminBackup = angular.copy(this.admin);
this.userBackup = angular.copy(this.user)
return defer.resolve();
});
}
return defer.promise;
};
}
J'ai également créé cette interface:
interface IConfigService {
put(): ng.IHttpPromise<>;
}
Toutefois, le code me donne un message d'erreur indiquant:
Error 3 Cannot convert 'void' to 'ng.IHttpPromise<any>'.
Error 4 Cannot convert 'ng.IPromise<{}>' to 'ng.IHttpPromise<any>':
Type 'ng.IPromise<{}>' is missing property 'success' from type 'ng.IHttpPromise<any>'.
Lorsque vous créez votre propre différés de l'objet de sa promesse est de type
ng.IPromise
, fondamentalement, si vous utilisez vs et comme suggestion lorsque vous passez la souris sur une méthode particulière, il vous dira quel type il retourne et vous pouvez obtenir le type de retour. Il n'y a rien de mal à faire return defer.resolve();
parce que le retour n'est pas évaluée de toute façon, dans votre cas, puisque vous êtes de retour différé promesse de votre propre et de résolution ou son refus par vous-même, mais il est très souvent utilisé lorsque vous souhaitez court-circuit de votre instructions conditionnelles.OriginalL'auteur Alan2 | 2014-07-26
Vous devez vous connecter pour publier un commentaire.
Utilisation
Aussi vous avez pu le laisser implicitement type pour vous si vous ne déclarez pas un type de retour et de ne pas utiliser cette interface.
Aussi il devrait y avoir aucune instruction de retour ici :
Juste :
J'ai aussi utilisé <aucun>
utilisez ceci: var différé = q$.reporter<void>(); Cela vous permettra de retour void.
OriginalL'auteur basarat
Quand je suis tombé sur ce problème, j'ai trouvé que je n'étais pas en mesure d'utiliser
ng.IPromise<void>
que les déclarations deng.IHttpPromise<>
m'ont demandé de renvoyer un objet.Par exemple:
jeta un message d'erreur qui
Type IHttpPromise<{}> is not assignable to IPromise<void>
.Pour contourner ce problème je l'ai fait retourner
ng.IPromise<any>
. Pas à 100% l'idéal, mais c'était la meilleure solution que je pouvais venir que n'ai pas besoin de m'étendre surangular.d.ts
Code Final:
OriginalL'auteur Kyle Muir