#javascript #typescript #visual-studio-code #intellisense
Вопрос:
Сегодня я ссылался на неназванную/неопределенную переменную, но Typescript/Intellisense не уловил ее, что привело к ошибке в моем коде. Имя переменной — «статус», и Intellisense взял определение из файла /usr/share/code/resources/app/extensions/node_modules/typescript/lib/lib.dom.d.ts
. (Я использую Linux Ubuntu 20.04)
Более подробная информация:
Я инициализировал базовый проект, чтобы продемонстрировать ошибку (Извините, я не могу публиковать изображения из-за низкой репутации).
безымянная переменная «статус» не создает ошибок
Нажав «Найти все ссылки», я обнаружил, что «статус» был объявлен в случайном файле lib.dom.d.ts
«статус» был объявлен в случайном файле lib.dom.d.ts
Похоже, это произошло потому, что я устанавливаю Typescript по всему миру? Я также установил Typescript в проекте; обе установки обновлены до версии «typescript@4.3.4»
Я также проверил, является ли это только ошибкой, специфичной для VSCode, но LSP-машинопись Sublime Text также получила такое же неправильное определение.
Как мне решить эту проблему ?
Мой файл tsconfig.json выглядит следующим образом
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "./dist",
"rootDir": "./src",
"removeComments": true,
"strict": true,
"noImplicitAny": false,
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"exlude": ["node_modules"]
}
Ответ №1:
Определение типа правильное.
Он определяется window.status
(хотя и устарел), поэтому status
его следует считать глобальным в контексте браузера.
Вчера я столкнулся с той же проблемой с close
/ window.close
.
Комментарии:
1. Вау, спасибо за ответ. Я надеюсь, что в документе Typescript есть еще один раздел для путаницы имен переменных, подобных этому. Итак, как мне указать Typescript не включать контекст браузера в мои файлы API ?
2. Хорошо, я нашел способ. Смотрите мой ответ ниже.
Ответ №2:
Благодаря ответу @spender я понял, что это ожидаемое поведение Typescript, и это я ошибся.
Я решил проблему, добавив опцию «lib» в свой файл tsconfig.json. Похоже, что если я исключу опцию «библиотека», Typescript по умолчанию будет включать все библиотеки. Но я не хочу, чтобы библиотека «dom» вмешивалась в мой внутренний код, поэтому я использую: "lib": ["es2015"]
Если я когда-нибудь буду использовать библиотеку «dom» в будущем, я думаю, мне просто придется быть особенно осторожным