javascript - @types/react kan ikke finne navnet 'HTMLDialogElement'
Jeg støter på et merkelig byggeproblem med TypeScript og @types/react. Jeg har to TypeScript-konfigurasjonsfiler: en for filer som bruker React, og en for de som ikke gjør det. Når jeg bygger delen av prosjektet mitt som ikke bruker React, ser jeg følgende feil:
node_modules/@types/react/index.d.ts(3508,58): feil TS2304: Kan ikke finne navnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3508,78): feil TS2304: Kan ikke finne navnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3782,72): feil TS2304: Kan ikke finne navnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3782,92): feil TS2304: Kan ikke finne navnet 'HTMLDialogElement'.
Jeg klarte å gjenskape feilen med et minimalt eksempel:
node_modules/typescript/bin/tsc typescript/foo.ts --outDir static/js/src --module none
Filen typescript/foo.ts er en minimal fil jeg brukte for å reprodusere problemet, og er bevisst kort:
function printNumber(n: number) {
console.log(n);
}
let x = 3;
x *= 4;
printNumber(x);
Legg merke til at foo.ts ikke har noen referanser til react overhodet. Det merkeligste er når jeg avinstallerer @types/react, forsvinner feilmeldingene.
Hva skjer?
REDIGER: Jeg fant dette problemet som oppstår når tsc-versjon > 2.3.2. Jeg nedgraderte tsc til versjon 2.3.2, men problemet vedvarer.
Svar #1
Så vidt jeg forstår typescripts retningslinjer, er dette relativt til hvilken versjon du bruker. Da typescript 2.3.2 ble lansert, var ikke definisjonen for HTMLDialogElement inkludert i @types/react, så du ser denne feilen. Du kan lese mer om dette i denne GitHub-issue.
Sannsynligvis, selv om du ikke inkluderer React i foo.ts, vil TypeScript-kompilatoren inkludere og sjekke alle definisjonene du har, selv de i node_modules. Dette forklarer hvorfor du får denne feilen selv uten å inkludere React.
Når jeg tenker på det, inkluderer jeg ikke engang definisjonene jeg skrev - men de brukes av transpilereren.
Jeg hadde det samme problemet på et prosjekt som nylig ble klonet i går; jeg løste det ved å oppdatere TypeScript til ^2.7.0.
Svar #2
Jeg hadde samme problemet. Prøvde alle oppgraderingene og nedgraderingene som ble nevnt her, men ingenting fungerte for meg. Til slutt endte jeg opp med å kommentere ut 'dialog' fra linjenummer 3782 og 3508 i node_modules/@types/react/index.d.ts. Dette er bare en rask løsning.