javascript - @types/react kan inte hitta namnet 'HTMLDialogElement'
Jag stöter på ett konstigt byggproblem med TypeScript och @types/react. Jag har två TypeScript-konfigurationsfiler: en för filer som använder React och en för de som inte gör det. När jag bygger den del av mitt projekt som inte använder React, ser jag följande fel:
node_modules/@types/react/index.d.ts(3508,58): fel TS2304: Kan inte hitta namnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3508,78): fel TS2304: Kan inte hitta namnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3782,72): fel TS2304: Kan inte hitta namnet 'HTMLDialogElement'. node_modules/@types/react/index.d.ts(3782,92): fel TS2304: Kan inte hitta namnet 'HTMLDialogElement'.
Jag kunde reproducera felet med ett minimalt exempel:
node_modules/typescript/bin/tsc typescript/foo.ts --outDir static/js/src --module none
Filen typescript/foo.ts är en minimal fil som jag använde för att återskapa problemet, och är medvetet kort:
function printNumber(n: number) {
console.log(n);
}
let x = 3;
x *= 4;
printNumber(x);
Observera att foo.ts inte har några referenser till React alls. Det konstigaste är att när jag avinstallerar @types/react försvinner felmeddelandena.
Vad händer?
REDIGERA: Jag hittade detta problem som uppstår när tsc-version > 2.3.2. Jag nedgraderade tsc till version 2.3.2 men problemet kvarstår.
Svar #1
Så vitt jag förstår TypeScripts riktlinjer, är detta beroende av vilken version du använder. När TypeScript 2.3.2 släpptes ingick inte definitionen för HTMLDialogElement i @types/react, så du ser detta fel. Du kan läsa mer om detta i detta GitHub-ärende.
Sannolikt, även om du inte inkluderar React i din foo.ts, kommer TypeScript-kompilatorn att inkludera och kontrollera alla definitioner som du har, även de i node_modules. Detta förklarar varför du får detta fel även utan att inkludera React.
Nu när jag tänker på det, inkluderar jag inte ens definitionerna som jag skrev - men de används av transpileraren.
Jag hade samma problem på ett projekt som nyligen klonades igår; jag fixade det genom att uppdatera TypeScript till ^2.7.0.
Svar #2
Jag hade samma problem. Testade alla uppgraderingar och nedgraderingar som nämns här, men inget fungerade för mig. Till slut slutade det med att jag kommenterade ut 'dialog' från radnummer 3782 och 3508 i node_modules/@types/react/index.d.ts. Detta är bara en snabb lösning.