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

React Native/Expo/TS项目中Redux Toolkit的PayloadAction导出错误求助

Redux Toolkit中PayloadAction导入报错的解决办法

问题描述

在React Native/Expo/TypeScript项目中使用如下导入语句:

import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';

其中createSlice和createAsyncThunk能正常使用,但PayloadAction触发TypeScript错误:

[ts] 模块"/Users/tim/Documents/Projects/app fullstack/my-app/node_modules/@reduxjs/toolkit/dist/index"没有导出成员'PayloadAction'。

查看Redux Toolkit的index文件后发现,TypeScript无法识别带type关键字的导出语句(例如export type { PayloadAction, ... } from './createAction';),但不带type关键字的导出(例如export { createSlice, ... } from './createSlice';)可以正常识别。

项目的package.json内容如下:

{
  "name": "my-app",
  "main": "expo-router/entry",
  "version": "1.0.0",
  "scripts": {
    "start": "npx expo start --port 8084",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "test": "jest --watchAll",
    "lint": "eslint .",
    "ts:check": "tsc"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo/vector-icons": "^14.0.0",
    "@react-navigation/native": "^6.0.2",
    "@reduxjs/toolkit": "^2.2.1",
    "axios": "^1.6.7",
    "cors": "^2.8.5",
    "expo": "~50.0.2",
    "expo-asset": "~9.0.2",
    "expo-file-system": "~16.0.6",
    "expo-font": "~11.10.2",
    "expo-linking": "~6.2.2",
    "expo-router": "~3.4.3",
    "expo-splash-screen": "~0.26.3",
    "expo-sqlite": "~13.2.2",
    "expo-status-bar": "~1.11.1",
    "expo-system-ui": "~2.9.3",
    "expo-web-browser": "~12.8.1",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "react-native": "0.73.2",
    "react-native-safe-area-context": "4.8.2",
    "react-native-screens": "~3.29.0",
    "react-native-web": "~0.19.6",
    "react-redux": "^9.1.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.0",
    "@types/node": "^20.11.20",
    "@types/react": "~18.2.45",
    "@types/sqlite3": "^3.1.11",
    "eslint": "^8.57.0",
    "eslint-config-universe": "^12.0.0",
    "eslint-import-resolver-typescript": "^3.6.1",
    "jest": "^29.2.1",
    "jest-expo": "~50.0.1",
    "prettier": "^3.2.5",
    "react-test-renderer": "18.2.0",
    "typescript": "^5.1.3"
  },
  "private": true
}

可行解决方案

1. 直接从createAction模块导入类型

绕开顶层导出的类型识别问题,直接从createAction模块导入PayloadAction,并且用import type明确标记类型导入:

import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import type { PayloadAction } from '@reduxjs/toolkit/createAction';

2. 调整TypeScript配置

检查项目根目录的tsconfig.json,确保以下关键配置正确:

{
  "compilerOptions": {
    "moduleResolution": "node16", // 或 nodenext,适配ES模块导出规则
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "skipLibCheck": false, // 不要跳过库的类型检查,避免隐藏问题
    "strict": true
  }
}

修改后执行npm run ts:check验证类型是否正常。

3. 清理依赖缓存并重装

依赖缓存可能导致类型文件异常,执行以下步骤:

# 删除node_modules和锁文件
rm -rf node_modules
rm package-lock.json

# 重新安装依赖
npm install

4. 升级Redux Toolkit到最新版本

虽然当前使用的v2.2.1是较新版本,但后续版本可能修复了类型导出的bug,尝试升级:

npm update @reduxjs/toolkit

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:14:53