Lorsque vous intégrez @ nestjs / terminus @ 6.1.0 dans notre projet nestjs, un type de @ nestjs / microservices n'est pas reconnu:
$> tsc
[...] "dependencies": { "@nestjs/common": "^6.0.5", "@nestjs/core": "^6.0.5", "@nestjs/mongoose": "^6.0.0", "@nestjs/graphql": "^6.2.1", "@nestjs/swagger": "^3.0.2", "@nestjs/terminus": "6.1.0", "@godaddy/terminus": "4.1.0", "app-root-path": "^2.2.1", "class-transformer": "^0.2.0", "class-validator": "^0.9.1", "codacy-coverage": "^3.1.0", "apollo-server-express": "^2.5.0", "graphql": "^14.3.0", "graphql-tools": "^4.0.4", "js-cache": "^1.0.3", "mongoose": "^5.4.0", "reflect-metadata": "^0.1.13", "rxjs": "^6.4.0", "typescript": "^3.5.2", "winston": "^3.2.1" }, "devDependencies": { "@nestjs/testing": "^5.0.0", "@types/express": "^4.0.39", "@types/jest": "^21.1.8", "@types/node": "^9.3.0", "@types/supertest": "^2.0.4", "jest": "^21.2.1", "nodemon": "^1.14.1", "prettier": "^1.11.1", "supertest": "^3.0.0", "ts-jest": "^21.2.4", "ts-loader": "^4.1.0", "ts-node": "^4.1.0", "tsconfig-paths": "^3.1.1", "tslint": "5.3.2" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "lib", "testRegex": ".spec.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "coverageDirectory": "../coverage" }
Lors de l'ajout de npm i --save-dev @ types / mocha , j'obtiens évidemment des conflits avec Jest qui est le framework de test que nous utilisons ...
$> tsc p>
node_modules/@types/jest/index.d.ts:27:13 - error TS2403: Subsequent variable declarations must have the same type. Variable 'beforeEach' must be of type 'HookFunction', but here has type 'Lifecycle'. 27 declare var beforeEach: jest.Lifecycle; ...
Pour l'instant, la seule solution de contournement que j'ai trouvée était d'utiliser skipLibCheck dans le fichier tsconfig.json ... pas très propre.
Voici la partie dep de mon fichier package.json:
node_modules/@nestjs/microservices/external/redis.interface.d.ts:2:23 - error TS2688: Cannot find type definition file for 'mocha'. 2 /// <reference types="mocha" /> ~~~~~ Found 1 error.
Une idée de comment résoudre ce problème de manière propre?
Merci!
4 Réponses :
Vous pouvez faire fonctionner votre approche en ajoutant "types": []
à compilerOptions
et en incluant tous les types de packages sauf @ types / jest
. Dans votre cas, vous pouvez utiliser "types": ["express", "node", "supertest"]
.
J'ai essayé celui-ci, mais définir moka "types": ["express", "node", "supertest", "mocha"]
, mais exécuter mes tests e2e (basés sur Jest) ne sera pas fonctionne plus car il utilisera des types de moka au lieu de Jest (ou ne reconnaîtra pas ceux propres à Jest).
Avez-vous essayé d'utiliser plusieurs tsconfigs? J'utilise tsconfig.build.json qui étend tsconfig.js pour exécuter tsc, donc j'ai mis des types dans tsconfig.build.json.
Même erreur pour moi. Comme il semblait lié au package microservices de NestJS, je viens d'ajouter "@ nestjs / microservices" dans mes dépendances et maintenant cela fonctionne bien.
J'ai également essayé celui-ci mais cela n'a pas fonctionné pour moi. Utilisez-vous également Jest dans votre projet?
Oui, j'utilise Jest, c'est étrange que cela n'ait pas fonctionné pour vous. Peut-être pourriez-vous essayer de mettre à jour vos packages? J'ai tout mis à jour car c'est une sorte de nouveau projet. Je vois que vous utilisez Jest @ 21 et qu'ils ont maintenant 24 ans, alors peut-être que cela vous aidera.
Pour ceux qui ont le même problème, une alternative à la skipCheckLib que j'ai trouvée dans le l'article suivant est de:
Cela remplacera mocha def et évitera la duplication de def (puisque je n'utilise que Jest).
Ce n'est pas aussi propre que je le souhaiterais, mais c'est toujours mieux que l'option skipChekLib .
Nous avons résolu ce problème avec la publication de @ nestjs / microservices @ 6.5.1
- désolé pour le désagrément occasionné.
https://github.com/nestjs/nest/issues/2534 p >