找不到模块“./SLink.svelte”或其相应的类型声明
Cannot find module './SLink.svelte' or its corresponding type declarations
我正在尝试在现有项目中使用 Svelte 和 TypeScript 配置 Jest。
我已经根据 this article (using Babel and ts-jest).
设置了所有内容
当我 运行 测试时,我得到了这个:
FAIL src/tests/methods.test.ts
● Test suite failed to run
src/router/components/index.ts:1:19 - error TS2307: Cannot find module './SLink.svelte' or its corresponding type declarations.
1 import SLink from './SLink.svelte';
~~~~~~~~~~~~~~~~
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.705 s
Ran all test suites.
npm ERR! Test failed. See above for more details.
我导入了其他不会引发此错误的组件,唯一的区别是 SLink
被导入到常规 .ts
文件,而我的其他组件被导入到其他组件(除了 App.svelte
).
如果我将导出更改为空字符串,它会按预期进行测试(尽管它仍然会抛出无法呈现该组件的错误)。
建议添加 @tsconfig/svelte
,我已经这样做了。
如果我在导入上方添加 // @ts-ignore
,它可以正常工作,但是,还有其他解决方法吗?
相关代码:
src/tests/methods.test.ts:
import { render } from '@testing-library/svelte';
import App from '../App.svelte';
test('should render', () => {
const results = render(App);
expect(() => results.getByText('Hello world!')).not.toThrow();
});
src/router/components/index.ts:
import SLink from './SLink.svelte';
export { SLink };
SLink
是一个普通的 Svelte 组件,不 使用 TypeScript。
jest.config.js:
module.exports = {
preset: 'ts-jest',
clearMocks: true,
coverageDirectory: 'coverage',
transform: {
'^.+\.svelte$': [
'svelte-jester',
{
preprocess: true,
},
],
'^.+\.ts$': 'ts-jest',
'^.+\.js$': 'babel-jest',
},
moduleFileExtensions: ['js', 'ts', 'svelte'],
};
babel.config.js:
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript',
],
};
svelte.config.js:
import sveltePreprocess from 'svelte-preprocess';
module.exports = {
preprocess: sveltePreprocess(),
};
文件树:
src
|_ tests
|_ methods.test.ts
|_ router
|_ components
|_ index.ts
|_ SLink.svelte
我看到了类似的错误,感谢 另一个问题,我意识到由于我的 tsconfig.json 文件中的覆盖,我不小心停止了引用 Svelte 类型。
我的 tsconfig 扩展了 Svelte 默认值,但我在下面添加了 compilerOptions
覆盖:
{
"extends": "@tsconfig/svelte/tsconfig.json",
// ...
"compilerOptions": {
"types": ["node", "jest"]
}
}
在构建我的项目时,我遇到了这个错误(类似地,关于在 .ts
文件中导入 Svelte 组件):
(!) Plugin typescript: @rollup/plugin-typescript TS2307: Cannot find module './App.svelte' or its corresponding type declarations.
看来我不小心覆盖了一些 Svelte 默认设置。根据上面链接的建议,我修改了我的 tsconfig(将 "svelte"
添加到类型数组):
{
// ...
"compilerOptions": {
"types": ["node", "svelte", "jest"]
}
}
就我而言,这修复了错误。
我正在尝试在现有项目中使用 Svelte 和 TypeScript 配置 Jest。
我已经根据 this article (using Babel and ts-jest).
设置了所有内容当我 运行 测试时,我得到了这个:
FAIL src/tests/methods.test.ts
● Test suite failed to run
src/router/components/index.ts:1:19 - error TS2307: Cannot find module './SLink.svelte' or its corresponding type declarations.
1 import SLink from './SLink.svelte';
~~~~~~~~~~~~~~~~
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.705 s
Ran all test suites.
npm ERR! Test failed. See above for more details.
我导入了其他不会引发此错误的组件,唯一的区别是 SLink
被导入到常规 .ts
文件,而我的其他组件被导入到其他组件(除了 App.svelte
).
如果我将导出更改为空字符串,它会按预期进行测试(尽管它仍然会抛出无法呈现该组件的错误)。
@tsconfig/svelte
,我已经这样做了。
如果我在导入上方添加 // @ts-ignore
,它可以正常工作,但是,还有其他解决方法吗?
相关代码:
src/tests/methods.test.ts:
import { render } from '@testing-library/svelte';
import App from '../App.svelte';
test('should render', () => {
const results = render(App);
expect(() => results.getByText('Hello world!')).not.toThrow();
});
src/router/components/index.ts:
import SLink from './SLink.svelte';
export { SLink };
SLink
是一个普通的 Svelte 组件,不 使用 TypeScript。
jest.config.js:
module.exports = {
preset: 'ts-jest',
clearMocks: true,
coverageDirectory: 'coverage',
transform: {
'^.+\.svelte$': [
'svelte-jester',
{
preprocess: true,
},
],
'^.+\.ts$': 'ts-jest',
'^.+\.js$': 'babel-jest',
},
moduleFileExtensions: ['js', 'ts', 'svelte'],
};
babel.config.js:
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 'current' } }],
'@babel/preset-typescript',
],
};
svelte.config.js:
import sveltePreprocess from 'svelte-preprocess';
module.exports = {
preprocess: sveltePreprocess(),
};
文件树:
src
|_ tests
|_ methods.test.ts
|_ router
|_ components
|_ index.ts
|_ SLink.svelte
我看到了类似的错误,感谢
我的 tsconfig 扩展了 Svelte 默认值,但我在下面添加了 compilerOptions
覆盖:
{
"extends": "@tsconfig/svelte/tsconfig.json",
// ...
"compilerOptions": {
"types": ["node", "jest"]
}
}
在构建我的项目时,我遇到了这个错误(类似地,关于在 .ts
文件中导入 Svelte 组件):
(!) Plugin typescript: @rollup/plugin-typescript TS2307: Cannot find module './App.svelte' or its corresponding type declarations.
看来我不小心覆盖了一些 Svelte 默认设置。根据上面链接的建议,我修改了我的 tsconfig(将 "svelte"
添加到类型数组):
{
// ...
"compilerOptions": {
"types": ["node", "svelte", "jest"]
}
}
就我而言,这修复了错误。