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.json

Min 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.ts faktiskt borde namnges efter modulen som inte har typer. Så för mig var jag tvungen att ändra: @types/index.d.ts till @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.

Relaterade artiklar