J'essaie d'utiliser ce mais le compilateur produit ce qui suit:
Client.ts(2,5): error TS2134: Subsequent variable declarations must have the same type.
Variable "XMLHttpRequest" must be of type "{ prototype: XMLHttpRequest; LOADING: number;
DONE: number; UNSENT: number; OPENED: number; HEADERS_RECEIVED: number; new():
XMLHttpRequest; }", but here has type "any".
Pour référence, la ligne produisant l'erreur est:
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
Ai-je raison de supposer que c'est parce que node.d.ts n'a pas de définition pour ce module? Si oui, comment pourrais-je procéder pour implémenter la définition, le bit qui me confond est le prototype
et new()
avoir le type XMLHttpRequest
. Est-ce une référence récursive ou dira qu'une déclaration de classe vide suffit?
Réponses:
1 pour la réponse № 1Ceci est dû au fait XMLHttpRequest
est défini dans lib.d.ts:
declare var XMLHttpRequest: {
prototype: XMLHttpRequest;
new (): XMLHttpRequest;
LOADING: number;
DONE: number;
UNSENT: number;
OPENED: number;
HEADERS_RECEIVED: number;
}
Cela contredit votre définition de XMLHttpRequest
qui est en fait résolu any
var XMLHttpRequest
Si cette lib est compatible avec le navigateur XMLHttpRequest
vous pouvez faire (fractionner la déclaration et l'affectation). De cette façon, le compilateur n'essaye pas de le redéfinir comme any
:
var XMLHttpRequest;
XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
Sinon, je vous suggère d'utiliser un nom différent, OU de compiler avec le drapeau du compilateur --noLib.
0 pour la réponse № 2
Oui, node.d.ts n'aurait pas cette déclaration.
J'ai 2 options possibles pour créer un node-XMLHttpRequest.d.ts
manuellement. (Je ne pouvais pas en trouver un déjà défini) ou utilisez var XMLHttpRequest = <any>(require("xmlhttprequest").XMLHttpRequest);
Si vous utilisez beaucoup cette bibliothèque dans votre code, je recommanderais de définir le node-XMLHttpRequest.d.ts
pour bénéficier de la vérification du type tapuscrit.