web-dev-qa-db-fra.com

"TS2322: Type 'Timeout' n'est pas assignable au type" Numéro "" lors de l'exécution des tests d'unité

J'ai deux packages dossiers et un paquet (emballage A) dépend de l'autre (emballage B). Chaque paquet a un test d'unité configuré à l'aide de Karma. Lorsque j'exécute des tests d'unité pour chaque individuellement après avoir installé toutes les dépendances de NPM, les tests d'unité fonctionnent bien. Cependant, si j'utilise npm link package-b Dans l'emballage A et Exécutez le package A Tests Unitaires d'A puis, je reçois l'erreur indiquée dans le titre: "TS2322: Type 'Timeout' n'est pas assignable au type" Numéro "."

La ligne en question est un appel à setTimeout. Après avoir creusé, j'ai trouvé que lors de l'exécution des tests séparément sans npm link, TypeScript identifie correctement la signature setTimeout dans TypeScript/lib/lib.dom comme type souhaité, mais dans le cas de défaut après avoir utilisé npm link Il utilise à l'aide de setTimeout Signature de @types/node/index. Je l'ai confirmé en modifiant le type de retour sur setTimeout à string et observant la même erreur avec string à la place de Timeout.

Ce que je ne suis pas certain, c'est pourquoi Le compilateur TypeScript a décidé d'utiliser la définition alternative dans ce cas particulier, ni de la façon dont je peux la convaincre d'utiliser la définition souhaitée. Je suis heureux de poster du code, mais je ne suis pas sûr de ce qui serait utile dans ce cas, étant donné que tout ce qui est sur la ligne d'échec est l'appel setTimeout appel.

17
dawsonc623

Vous pouvez essayer avec l'utilisation de window.setTimeout Au lieu de simplement seterimer, de cette façon, le type dactylography sera explicitement utilisé

6
Pablo Marcano