【问题标题】:Cannot find module './SLink.svelte' or its corresponding type declarations找不到模块“./SLink.svelte”或其对应的类型声明
【发布时间】:2021-03-17 15:32:01
【问题描述】:

我正在尝试在现有项目中使用 Svelte 和 TypeScript 配置 Jest。

我已经按照 this article 设置了所有内容(使用 Babel 和 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 文件中,而我的其他组件被导入到其他组件中(@987654327 除外@)。

如果我将导出更改为空字符串,它会按照应有的方式通过测试(尽管它仍然会引发无法呈现此组件的错误)。

This SO post 建议添加@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

【问题讨论】:

    标签: typescript jestjs svelte


    【解决方案1】:

    我看到了一个类似的错误,感谢this answer 提出另一个问题,我意识到由于我的 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" 添加到 types 数组):

    {
      // ...
      "compilerOptions": {
        "types": ["node", "svelte", "jest"]
      }
    }
    

    就我而言,这修复了错误。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2021-01-19
      • 2022-10-17
      • 2022-11-05
      • 2022-06-25
      • 2022-11-10
      • 2022-10-23
      • 2021-08-16
      • 2022-10-22
      相关资源
      最近更新 更多