typescript - 'typeRoots' kan inte hitta d.ts deklarationsfiler i projektet
// tsconfig.json inside "compilerOptions"
"typeRoots": ["./@types", "./node_modules/@types"],
// {projectRoot}/@types/express/index.d.ts
declare global {
namespace Express {
interface Request {
verifiedAccessToken: string
}
}
}
I en annan fil med req annoterad till Request inuti funktionsparametern, kan jag fortfarande inte sätta verifiedAccessToken utan ett lint-fel i VsCode:
req.verifiedAccessToken = accessToken;
// Property 'verifiedAccessToken' does not exist on
// type 'Request<ParamsDictionary, any, any, ParsedQs>'.ts(2339)
Något annat som behöver göras för att deklarationsfilen ska kunna användas?
// package.json, relevent deps
"dependencies": {
"express": "^4.17.1",
"node-typescript": "^0.1.3",
"ts-node": "^9.0.0",
"typescript": "^3.9.7"
},
"devDependencies": {
"@types/express": "^4.17.8",
"@types/node": "^14.0.27",
Svar #1
Försök att lägga till detta i din tsconfig.json:
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"*" : ["@types/*"]
}
}
}`
Se: https://github.com/microsoft/TypeScript/issues/22217
Svar #2
Jag följde länken i det accepterade svaret och hade fortfarande problem. Så, för framtida sökare, här är mitt svar (kopierat/klistrat från min kommentar i Github-ärendet):
@gaurav5430:s kommentar fick mig på rätt spår!
Min ursprungliga mappstruktur:
@types/ index.d.ts src/ index.ts package.json tsconfig.jsonMin
tsconfig.json:{ "compilerOptions": { "baseUrl": "./", "declaration": true, "esModuleInterop": true, "module": "commonjs", "outDir": "dist", "paths": { "*": [ "@types/*" ] }, "skipLibCheck": true, "sourceMap": true, "strict": true, "target": "es5", "typeRoots": [ "node_modules/@types", "@types" ], }, "include": [ "src/**/*" ] }Jag fick fortfarande fel och jag kunde inte förstå varför. Det visade sig att
@types/index.d.tsfaktiskt borde namnges efter modulen som inte har typer. Så för mig var jag tvungen att ändra:@types/index.d.tstill@types/csv-to-js-parser.d.ts.(Innehållet i den filen är
declare module "csv-to-js-parser";)SLUTLIGEN
Dessutom är detta problem super irriterande.
