diff --git a/e2e/cases/svelte/index.test.ts b/e2e/cases/svelte/index.test.ts
index df611b5921..322baefa09 100644
--- a/e2e/cases/svelte/index.test.ts
+++ b/e2e/cases/svelte/index.test.ts
@@ -38,21 +38,6 @@ rspackOnlyTest(
},
);
-rspackOnlyTest(
- 'should build svelte component with typescript',
- async ({ page }) => {
- const rsbuild = await buildFixture('ts', 'src/index.ts');
-
- await gotoPage(page, rsbuild);
-
- const title = page.locator('#title');
-
- await expect(title).toHaveText('Hello world!');
-
- rsbuild.close();
- },
-);
-
// test cases for CSS preprocessors
for (const name of ['less', 'scss', 'stylus']) {
rspackOnlyTest(
diff --git a/e2e/cases/svelte/ts/index.test.ts b/e2e/cases/svelte/ts/index.test.ts
new file mode 100644
index 0000000000..063541579a
--- /dev/null
+++ b/e2e/cases/svelte/ts/index.test.ts
@@ -0,0 +1,22 @@
+import { build, gotoPage, rspackOnlyTest } from '@e2e/helper';
+import { expect } from '@playwright/test';
+
+rspackOnlyTest(
+ 'should build svelte component with typescript',
+ async ({ page }) => {
+ const rsbuild = await build({
+ cwd: __dirname,
+ page,
+ });
+
+ await gotoPage(page, rsbuild);
+
+ const title = page.locator('#title');
+ await expect(title).toHaveText('Hello world!');
+
+ const count = page.locator('#count');
+ await expect(count).toHaveText('Count: 2');
+
+ rsbuild.close();
+ },
+);
diff --git a/e2e/cases/svelte/ts/rsbuild.config.ts b/e2e/cases/svelte/ts/rsbuild.config.ts
new file mode 100644
index 0000000000..47bc5c725c
--- /dev/null
+++ b/e2e/cases/svelte/ts/rsbuild.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from '@rsbuild/core';
+import { pluginSvelte } from '@rsbuild/plugin-svelte';
+
+export default defineConfig({
+ plugins: [pluginSvelte()],
+});
diff --git a/e2e/cases/svelte/ts/src/App.svelte b/e2e/cases/svelte/ts/src/App.svelte
index dcf5521f0c..02096444f3 100644
--- a/e2e/cases/svelte/ts/src/App.svelte
+++ b/e2e/cases/svelte/ts/src/App.svelte
@@ -1,9 +1,11 @@
Hello {name}!
+ Count: {getCount()}