javascript - Migrera från JS, fel i tsc-build


Jag provar TypeScript för första gången och håller på att migrera en befintlig JavaScript-kodbas.

Jag har följt anvisningarna på TS-migrationsguiden men stötte på byggproblem direkt.

Den största hindret jag stöter på är att tsc klagar på att försöka kompilera en .ts-fil som ligger i min node_modules-katalog.

Min tsconfig.json är:

{
  "compilerOptions": {
    "outDir": "./dist",
    "allowJs": true,
    "lib": ["esnext"],
    "target": "es5"
  },
  "include": ["./src/**/*"],
  "exclude": ["node_modules", "__tests__"]
}

Som du kan se har jag försökt att säga till tsc att ignorera node_modules-mappen, men det verkar som att den fortfarande går in där.

Det här är felet - även om jag inte är säker på hur hjälpsamt det är:

node_modules/http-link-dataloader/dist/src/types.d.ts:14:22 - error TS2304: Cannot find name 'RequestInit'.

14     referrerPolicy?: RequestInit['referrerPolicy'];
                        ~~~~~~~~~~~

Några råd?

Svar #1

Du kan behöva en "skipLibCheck": true i kompilatoralternativ.

Via: https://github.com/Microsoft/TypeScript/issues/14293

Redigera: Om man gräver djupare i detta bör du egentligen inte behöva använda skipLibCheck. Problemet är att TS tittar på definitionerna för http-link-dataloader och kan inte hitta RequestInit.

När man tittar på definitionsfilen för http-link-dataloader definieras inte typen för RequestInit:

https://github.com/prisma/http-link-dataloader/blob/master/src/types.ts

Ytterligare grävande har lett mig till att upptäcka att RequestInit faktiskt är en del av fetch. Relevant GitHub-ärende

För att kunna använda typsättningar för klient-sida JS som fetch vill du använda dom-biblioteket i TypeScript.

"lib": [
    "dom",
    ...
]

Relaterade artiklar