@types/react не может найти имя 'HTMLDialogElement'

У меня возникла странная проблема сборки с typescript и @types/react. У меня два конфигурационных файла typescript: один для файлов, которые используют реакцию, и один для тех, которые этого не делают. При создании части моего проекта, который не использует реакцию, я вижу следующую ошибку:

node_modules/@types/react/index.d.ts(3508,58): ошибка TS2304: не удается найти имя "HTMLDialogElement". node_modules/@types/react/index.d.ts(3508,78): ошибка TS2304: не удается найти имя "HTMLDialogElement". node_modules/@types/react/index.d.ts(3782,72): ошибка TS2304: не удается найти имя "HTMLDialogElement". node_modules/@types/react/index.d.ts(3782,92): ошибка TS2304: не удается найти имя "HTMLDialogElement".

Я смог воспроизвести ошибку с минимальным примером:

node_modules/typescript/bin/tsc typescript/foo.ts --outDir static/js/src --module none

Файл typescript/foo.ts является минимальным файлом, который я использовал для воспроизведения проблемы, и намеренно коротким:

function printNumber(n: number) {
    console.log(n);
}

let x = 3;
x *= 4;
printNumber(x);

Обратите внимание, что foo.ts не имеет ссылок на какие бы то ни было реакции. Самая странная часть этого - когда я удаляю @types/react, сообщения об ошибках уходят.

Что происходит?

EDIT: я нашел эту проблему, которая проявляется при версии tsc > 2.3.2. Я понизил tsc до версии 2.3.2, но проблема не устранена.

Ответ 1

Насколько я понимаю политики typescript, это касается версии, которую вы используете. Когда typescript 2.3.2 отсутствовало, определение HTMLDialogElement не было включено в @types/react, поэтому вы видите эту ошибку. Подробнее об этом можно узнать в этой проблеме github.

Возможно, даже если вы не включите React в свой foo.ts, компилятор typescript включит и проверит все определения, которые у вас есть, даже те, что указаны в node_modules. Это объяснит, почему у вас есть эта ошибка, даже без включения React.

Теперь, когда я думаю об этом, я не включаю определения, которые я написал, но они используются транспилером.

У меня была такая же проблема в проекте, недавно клонированном вчера; Я исправил его, обновив typescript до ^ 2.7.0.

Ответ 2

У меня была та же проблема. попробовал все обновления и понижения, упомянутые здесь. Но ничто не помогло мне. наконец, закончил комментирование "диалога" из номера строки 3782 и 3508 в node_modules/@types/react/index.d.ts Это только быстрое решение.

Ответ 3

У меня была такая же проблема (последнее приложение для создания-реакции, с typescript версия 2.5.3), и после того, как я выбрал приложение (npm run eject) и обновил typescript вручную текущей версии в package.json к текущему 2.7.2 это снова работает.

Кажется, это очень странная ошибка (в Windows), потому что мой колледж (такая же установка) не имеет этой ошибки. При поиске этого вы обнаружите, что он появляется каждые 2 месяца или около того, поэтому я предполагаю, что это не только эта проблема (https://github.com/Microsoft/TypeScript/issues/16880) Дума указала, что проект, над которым мы работаем, начинался где-то в декабре.