Как лучше отключить глобальные объявления?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: проект на js, jsconfig/tsconfig не используются.

По вводным: установил vitest, теперь в каждом файле есть объявлениеnode_modules/@vitest/globals.d.ts:

declare global { const suite: typeof import('vitest')['suite'] const test: typeof import('vitest')['test'] const chai: typeof import("vitest")["chai"] const describe: typeof import('vitest')['describe'] const it: typeof import('vitest')['it'] const expectTypeOf: typeof import('vitest')['expectTypeOf'] const assertType: typeof import('vitest')['assertType'] const expect: typeof import('vitest')['expect'] const assert: typeof import('vitest')['assert'] const vitest: typeof import('vitest')['vitest'] const vi: typeof import('vitest')['vitest'] const beforeAll: typeof import('vitest')['beforeAll'] const afterAll: typeof import('vitest')['afterAll'] const beforeEach: typeof import('vitest')['beforeEach'] const afterEach: typeof import('vitest')['afterEach'] const onTestFailed: typeof import('vitest')['onTestFailed'] const onTestFinished: typeof import('vitest')['onTestFinished'] } export {}

Например в пустом файлеindex.jsМожно вызвать:test();
По вводным: - ide считает что всё хорошо, при запуске получаемUncaught ReferenceError: test is not defined
689b434070fc0904639732.png

По вводным: при этом пока окно подсказок импортов активно, я могу выбрать откуда импортировать, там есть тот самый globals и иное расположение, если выбрать globals - останется поведение выше, если выбрать иное - импортируется как должно быть.

ВLanguages & Frameworks => JavaScript => LibrariesПо вводным: есть предопределённые подключения, среди них есть node_modules,По вводным: описание того как это работает.
689b425f4f25c885060579.png

Сейчас ситуация такая: это даёт ему информацию о функция и методах в этих библиотеках, что мы потом и видим в окне подсказок.
Сейчас ситуация такая: - Я отключил node_modules и глобальные объявления исчезли, как и всё остальное из node_modules. Но мне нужно отключить именно vitest/globals или только globals для всего хотя-бы.

Полез на youtrack:1,2Сейчас ситуация такая: - никакого внятного ответа не получил, кроме предложения сменить тип файла с глобальными объявлениями на текст, чтобы исключить из индексации.

По вводным: следом я открыл вопрос в vitest репозитории, мнеГоворятПо вводным: ровно то, что написано в документацииПо вводным: globals по умолчанию отключён.

Нужно понять: вопрос, что мне с этим делать?
Сейчас ситуация такая: - Я не хочу для каждой зависимости с глобальными объявлениями файлы трогать, ведь придётся патчить пакет и прочей ерундой заниматься.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Vitest добавляет глобальные объявления, когда в конфигурации включен globals: true или IDE видит типы vitest/globals. Если проект на JS без jsconfig/tsconfig, WebStorm может подтягивать d.ts из node_modules и показывать глобальные describe/it/expect во всех файлах. Это не ошибка выполнения, а поведение индексатора и TypeScript service в IDE.

Самый чистый вариант - не использовать глобалы Vitest, а импортировать функции явно:

import { describe, it, expect } from 'vitest';
 
describe('sum', () => {
  it('works', () => {
    expect(1 + 1).toBe(2);
  });
});

import { describe, it, expect } from 'vitest'; describe('sum', () => { it('works', () => { expect(1 + 1).toBe(2); }); });

В конфиге Vitest отключите globals:

import { defineConfig } from 'vitest/config';
 
export default defineConfig({
  test: {
    globals: false
  }
});

import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { globals: false } });

Если у вас уже есть types: ['vitest/globals'] в jsconfig/tsconfig - уберите. Если config нет, можно создать минимальный jsconfig.json, чтобы IDE понимала область проекта и не подтягивала лишние типы глобально.

{
  "compilerOptions": {
    "checkJs": false,
    "types": []
  },
  "exclude": ["node_modules", "dist"]
}

{ "compilerOptions": { "checkJs": false, "types": [] }, "exclude": ["node_modules", "dist"] }

В WebStorm также проверьте Settings → Languages & Frameworks → JavaScript → Libraries. Если там автоматически подключилась библиотека Vitest globals, ее можно отключить для обычного кода или ограничить областью тестов.

Практический вывод: если не хотите глобальные describe/expect в каждом файле, используйте globals: false и явные импорты. Это лучше для читаемости и меньше засоряет автодополнение. Для тестовых файлов IDE все равно будет понимать Vitest через импорты.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно