/ / Erreur du compilateur TypeScript lors de l'importation du module Node? - javascript, node.js, dactylographié

Erreur de compilation TypeScript lors de l'importation du module Node? - javascript, node.js, typescript

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 № 1

Ceci 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.