Попытка настроить vitest на уже существующем проекте vite (vue 3, typescript).
Мой vite.config.ts выглядит так:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
},
plugins: [vue()],
});
Но в коде VS он жалуется:
При наведении вижу:
Argument of type '{ test: { globals: boolean; environment: string; }; plugins: Plugin[]; }' is not assignable to parameter of type 'UserConfigExport'. Object literal may only specify known properties, and 'test' does not exist in type 'UserConfigExport'.ts(2345)
Я могу заставить его уйти, если я изменю эту строку:
import { defineConfig } from 'vite';
К:
import { defineConfig } from 'vitest/config';
Но почему? Что случилось с этим? Почему я должен импортировать defineConfig из vitest, чтобы он поддерживал тестовое свойство?
Краткий ответ:
Потому что так работает TypeScript. Интерфейс конфигурации Vite ничего не знает о Vitest, а TS не допускает избыточных свойств (свойств, не определенных типом/интерфейсом)
Потому что сам Vite ничего не знает о Vitest и его настройке. Таким образом, Vitest должен иметь конфигурацию продлевать Vite (определяется как интерфейс TS)
Чтобы использовать этот расширенный интерфейс (вместо исходного), его необходимо сначала импортировать.
В качестве альтернативы вы также можете использовать «команду тройной косой черты», как описано в Настройка Витест.
/// <reference types = "vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
// ...
},
})