Tapuscrit - utiliser la bonne version de setTimeout (nœud vs fenêtre)
Je suis en train de travailler sur la mise à niveau de certains vieux Tapuscrit code à utiliser la dernière version de compilateur, et j'ai de la difficulté avec un appel à setTimeout
. Le code devrait appeler le navigateur setTimeout
fonction qui retourne un nombre:
setTimeout(handler: (...args: any[]) => void, timeout: number): number;
Cependant, le compilateur est la résolution de cette le nœud de mise en place, qui renvoie un NodeJS.Minuterie:
setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
Ce code n'est pas exécuté dans le nœud, mais le nœud typings obtenez tiré comme une dépendance à quelque chose d'autre (pas sûr de ce qu').
Comment puis-je demander au compilateur de choisir la version de setTimeout
que je veux?
Voici le code en question:
let n: number;
n = setTimeout(function () { /* snip */ }, 500);
Ce qui produit l'erreur de compilateur:
TS2322: Type de Minuterie n'est pas cessible de type "nombre".
- Avez-vous un types:["nœud"] dans votre tsconfig.json? Voir stackoverflow.com/questions/42940954/...
- Non, je n'ai pas les types": ["nœud"] option dans le tsconfig de fichier. Mais les types de nœud sont arriver tiré comme un mécanisme national de prévention de la dépendance à quelque chose d'autre.
- Vous pouvez également définir explicitement les "types" dans le tsconfig.json - lorsque vous omettez le "nœud" il n'est pas utilisé lors de la compilation. par exemple, "types": ["jQuery"]
Vous devez vous connecter pour publier un commentaire.
Une autre solution qui n'a pas d'incidence sur la déclaration de la variable:
Aussi, il devrait être possible d'utiliser le
window
objet explicitement sansany
:window.setTimeout
) devrait être la bonne réponse à cette question que c'est là la meilleure solution.any
type, vous n'êtes pas vraiment en train de donner un Tapuscrit de réponse.number
type conduira à la Machine spécifique de la charpie des erreurs, lasetTimeout
fonction nécessite plus que cela.J'ai connu le même problème et la solution de contournement notre équipe a décidé d'utiliser, c'était juste pour utiliser "tout" pour le type de minuteur. E. g.:
Il fonctionnera avec les implémentations de setTimeout/setInterval/clearTimeout/clearInterval méthodes.
Je conseille
x: ReturnType<typeof setTimeout>;
qu'il sera réellement travail indépendamment de la plate-forme utilisée.setTimeout
/clearTimeout
et ne pas utiliserany
.Si vous voulez la vraie solution pour tapuscrit sur les minuteurs nous y voilà :
Bug est dans le type de retour de 'nombre' il n'est pas de la Minuterie ou quoi que ce soit d'autre.
C'est pour les tapuscrits version ~ >2.7 solution :
Maintenant, nous avons corrigé tous jute déclarer comme ceci :