typescript - @types/jest index.d.ts-fil ger fel
Jag har precis installerat @types/jest med npm i min stenciljs-startapp och nu, när jag försöker starta mitt projekt, returnerar det nyligen installerade node-paketet flera fel. Här är de fel det returnerar när jag kör npm start på mitt projekt:
[ ERROR ] TypeScript: node_modules/@types/jest/index.d.ts:39:30
A rest parameter must be of an array type.
L39: type ArgsType<T> = T extends (...args: infer A) => any ? A : never;
[ ERROR ] TypeScript: node_modules/@types/jest/index.d.ts:218:112
A tuple type element list cannot be empty.
L217: */
L218: ction spyOn<T extends {}, M extends keyof T>(object: T, method: M, accessType: 'get'): SpyInstance<T[M], []>;
L219: function spyOn<T extends {}, M extends keyof T>(object: T, method: M, accessType: 'set'): SpyInstance<void, [T[M]]>;
[ ERROR ] TypeScript: node_modules/@types/jest/index.d.ts:220:144
Type 'ArgsType<T[M]>' does not satisfy the constraint 'any[]'. Type
'{}' is not assignable to type 'any[]'. Property 'length' is missing
in type '{}'.
L219: function spyOn<T extends {}, M extends keyof T>(object: T, method: M, accessType: 'set'): SpyInstance<void, [T[M]]>;
L220: T, method: M): T[M] extends (...args: any[]) => any ? SpyInstance<ReturnType<T[M]>, ArgsType<T[M]>> : never;
L221: /**
[ ERROR ] TypeScript: node_modules/@types/jest/index.d.ts:807:50
Type 'ArgsType<T[P]>' does not satisfy the constraint 'any[]'. Type
'{}' is not assignable to type 'any[]'.
L806: type Mocked<T> = {
L807: [P in keyof T]: T[P] & MockInstance<T[P], ArgsType<T[P]>>;
L808: } & T;
Detta är min package.json:
...
"dependencies": {
"@stencil/core": "~0.15.2",
"@stencil/router": "~0.3.1",
"imask": "^4.1.5",
"jwt-decode": "^2.2.0",
"material-design-icons": "^3.0.1"
},
"license": "MIT",
"devDependencies": {
"@types/jest": "^23.3.14",
"@types/puppeteer": "1.12.1",
"jest": "23.6.0",
"jest-cli": "23.6.0",
"puppeteer": "1.8.0",
"workbox-build": "3.4.1"
}
...
Här är min tsconfig.json:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"allowUnreachableCode": false,
"declaration": false,
"experimentalDecorators": true,
"lib": [
"dom",
"es2015"
],
"moduleResolution": "node",
"module": "esnext",
"target": "es2017",
"noUnusedLocals": true,
"noUnusedParameters": true,
"jsx": "react",
"jsxFactory": "h"
},
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
Jag har försökt återskapa felet med en ny stencil starter-app och det är inte appen. Jag har också försökt ta bort min package-lock.json och installera om paketen för att bli av med eventuella konflikter.
Svar #1
Försök att lägga till "skipLibCheck": true i tsconfig.json för att hoppa över typkontrollen av alla deklarationsfiler (.d.ts).
REDIGERA: Detta är mer av en "sledgehammer"-lösning än en faktiskt fix. Som nämnts i det andra svaret, uppstår detta problem troligen eftersom Jest-typningarna skapades för en nyare TypeScript-version än den som används i projektet. Så den korrekta lösningen skulle vara att uppgradera projektet till en nyare TS-version.
Svar #2
Jag hoppas att detta inte är för sent och kan vara till hjälp för någon.
Istället för att hoppa över alla bibliotekscontroller kan du åsidosätta de bibliotek du vill. I vårt fall skulle det vara:@types/jest
Som ett alternativ till att sätta
"skipLibCheck": true i tsconfig.json
du kan skapa en ny mapp och fil från din rot: overrides/jest/index.d.ts och lägga till
"compilerOptions": {
"typeRoots": [
"overrides",
"./node_modules/@types"
]
}
Detta skulle i princip åsidosätta alla typkontroller under overrides-mappen och falla tillbaka till ./node_modules/@types förutom jest tack vare overrides/jest/index.d.ts-filen som kan vara tom.
Jag hittade detta svar på https://medium.com/@elenasufieva/handling-type-declarations-clash-in-typescript-b05b10723f47
