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

如何在React Redux的JSX项目中引入并复用TypeScript模块?

嘿,这个需求我之前刚好帮同事搞定过,其实核心就是让项目B同时兼容TypeScript和JavaScript/JSX文件,下面是亲测有效的步骤:

1. 给项目B添加TypeScript相关依赖

首先得把TypeScript和React、Redux的类型包装进去,打开终端跑命令:

# npm 用户
npm install typescript @types/react @types/react-dom @types/redux --save-dev

# yarn 用户
yarn add typescript @types/react @types/react-dom @types/redux --dev
2. 创建并配置tsconfig.json

在项目B的根目录下新建tsconfig.json文件,这是TypeScript的核心配置文件,关键要开启对JS文件的支持,参考配置如下:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "ESNext",
    "moduleResolution": "node",
    "allowJs": true, // 允许编译JavaScript文件
    "jsx": "react-jsx", // 适配React 17+的JSX转换,旧版React用"react"
    "strict": false, // 如果不想一开始就严格类型检查,可以先设为false,后续再开启
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.tsx",
    "src/**/*.js",
    "src/**/*.jsx" // 确保所有JS/JSX/TS/TSX文件都被包含
  ],
  "exclude": ["node_modules", "dist"]
}
3. 调整构建/开发环境配置

如果你的项目B是用Create React App创建的,那恭喜你,CRA已经内置了混合TS/JS的支持,安装完依赖后直接就能引入.ts文件,不需要额外改webpack配置。

如果是自定义webpack配置,那需要在webpack.config.js里添加对TS/TSX文件的处理规则,同时保留原有的JSX处理:

module.exports = {
  // ...其他配置
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'], // 优先解析TS文件
  },
  module: {
    rules: [
      // 处理TS/TSX文件
      {
        test: /\.(ts|tsx)$/,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
      // 保留原有的JS/JSX处理规则
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader',
        exclude: /node_modules/,
        options: {
          presets: ['@babel/preset-react'],
        },
      },
      // ...其他loader(比如css、图片等)
    ],
  },
};
4. 直接引入项目A的TS模块

现在你就可以在项目B的.jsx文件里直接import项目A的.ts模块了,比如:

// 项目B的某个.jsx文件
import { fetchUser } from '../path/to/projectA/utils/api.ts';
import { userReducer } from '../path/to/projectA/reducers/user.ts';

function UserProfile() {
  // 直接使用这些TS导出的内容就行
  useEffect(() => {
    fetchUser(123).then(res => console.log(res));
  }, []);
  
  return <div>User Profile</div>;
}
5. 可选:开启类型检查(推荐)

如果想让代码更健壮,可以在package.json里添加一个类型检查脚本:

{
  "scripts": {
    "type-check": "tsc --noEmit"
  }
}

跑npm run type-check就能检查所有文件的类型问题,要是想给单个JSX文件开启类型检查,只要在文件顶部加注释:

// @ts-check
import { fetchUser } from '../path/to/projectA/utils/api.ts';

// 这里如果类型不匹配,type-check会报错

最后提醒下:如果项目A的TS模块用到了一些高级语法,记得确保项目B的babel或TypeScript配置能兼容对应的ES版本哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:14:56