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

Laravel+Vite+React项目TypeScript接口报错及后续问题求助

Laravel+Vite+React项目TS相关问题解决方案

1. 解决"Unexpected reserved word 'interface'"报错

这个错的根源是:Vite在开发模式下,默认不会把.js/.jsx文件当作TypeScript解析,但生产构建时Laravel的Vite配置可能自动开启了TS处理逻辑,所以build能过dev报错。

解决办法:

  • 纯类型定义文件(比如只写interface、type)直接用.ts后缀,别混在JS/JSX文件里
  • React组件文件统一用.tsx后缀,让Vite按TSX规则解析

2. 解决"'React' refers to a UMD global"报错

这是TS配置没适配React 17+的自动JSX转换导致的,根本不需要手动import React。

修改项目根目录的tsconfig.json:

{
  "compilerOptions": {
    // 保留其他配置,修改这两项
    "jsx": "react-jsx",
    "jsxImportSource": "react"
  }
}

改完之后,.tsx文件里不用再写import React from 'react',TS会自动处理JSX的React依赖。

3. 解决console.log触发两次的问题

这是React Strict Mode的正常操作——开发模式下Strict Mode会重复执行渲染、副作用函数(比如useEffect),目的是帮你排查未清理的副作用,生产环境不会有这个情况。

两种处理方式:

  • 开发阶段接受这个现象,毕竟是调试用的机制,不影响功能
  • 去掉入口文件里的<React.StrictMode>包裹,比如在resources/js/app.tsx里:
    // 原来的代码
    ReactDOM.createRoot(document.getElementById('app')).render(
      <React.StrictMode>
        <App />
      </React.StrictMode>
    );
    
    // 修改后
    ReactDOM.createRoot(document.getElementById('app')).render(
      <App />
    );
    

额外配置检查

确保你的vite.config.js配置正确:

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

export default defineConfig({
  plugins: [
    laravel({
      input: 'resources/js/app.tsx',
      refresh: true,
    }),
    react(),
  ],
});

同时确认package.json里装了必要依赖:

{
  "devDependencies": {
    "@vitejs/plugin-react": "^4.0.0",
    "laravel-vite-plugin": "^0.7.0",
    "typescript": "^5.0.0",
    "vite": "^4.0.0"
  },
  "dependencies": {
    "react": "^18.0.0",
    "react-dom": "^18.0.0"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:55:19