You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目从JavaScript迁移至TypeScript遇Vite配置错误求助

解决Vite中TypeScript类型断言语法报错问题

问题描述

将React项目从JS转为TS后,在index.ts中使用TypeScript类型断言:

const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);

Vite抛出esbuild解析错误:

[plugin:vite:esbuild] Transform failed with 1 error:
/var/www/remote/dashboard/src/index.ts:25:65: ERROR: Expected ")" but found "as"
/var/www/remote/dashboard/src/index.ts:25:65
Expected ")" but found "as"
23 |  
24 |  
25 |  const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
   |                                                                   ^
26 |  
27 |  root.render(<RecoilRoot><App /></RecoilRoot>);

不使用TS语法时项目可正常运行。

问题根源

  1. React插件转译范围限制:vite.config.ts中react插件的include仅指定了**/*.tsx,但index.ts是.ts扩展名,导致该文件的TS语法未被插件转译,esbuild将其当作普通JS解析,无法识别as断言。
  2. 冗余loader配置冲突:optimizeDeps中把.ts文件指定为tsx loader,属于不必要的配置,可能引发解析逻辑冲突。

解决方案

修改vite.config.ts配置:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";

export default defineConfig({
    plugins: [react({
        include: '**/*.{ts,tsx}' // 同时匹配.ts和.tsx文件,确保所有TS文件都被转译
    })],
    server: {
        port: 3000
    },
    optimizeDeps: {
        esbuildOptions: {
            loader: {
                ".js": "jsx",
                // 移除对.ts文件的loader配置,Vite会默认处理.ts扩展名
            },
        },
    },
});

额外验证

  1. 确认tsconfig.json中的include字段为["src/**/*"],确保所有src目录下的.ts/.tsx文件都被TS编译器处理。
  2. 重启Vite开发服务器,此时as断言语法会被正确解析,报错消失。

内容的提问来源于stack exchange,提问作者Jud3v Digital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:55:21