React+TypeScript项目中setRows赋值roles时出现TS错误求助
解决React+TypeScript中setRows的类型不匹配错误
你的TypeScript错误核心是**useSelector返回的roles类型与setRows期望的GetAllRolesResponse[]类型不兼容**,以下是具体排查和解决步骤:
1. 检查Selector的返回类型
先确认allRoles这个Redux selector的返回类型是否和GetAllRolesResponse[]完全一致:
- 核对字段名是否一致(比如是否把
permission写成了permissions) - 检查字段是否为必填类型(比如selector返回的
createPermission可能是boolean | undefined,但你的接口定义是必填boolean)
2. 给useSelector显式指定类型
TypeScript有时无法正确推断selector的返回类型,手动指定类型约束可以避免这类问题:
// 先定义Redux根状态类型(如果项目中还没定义) import { combineReducers } from 'redux'; const rootReducer = combineReducers({ // 填入你的reducer配置 }); export type RootState = ReturnType<typeof rootReducer>; // 给useSelector指定类型 const roles = useSelector<RootState, GetAllRolesResponse[]>(allRoles);
3. 类型适配(如果结构存在差异)
如果roles的结构和GetAllRolesResponse接近但不完全匹配,可通过以下方式适配:
简单场景:类型断言
useEffect(() => { setRows(roles as GetAllRolesResponse[]); setLoader(false); }, []);
复杂场景:转换函数(更安全)
const transformRoles = (rawRoles: any): GetAllRolesResponse[] => { return rawRoles.map((role: any) => ({ id: role.id, roleName: role.roleName, description: role.description, permission: role.permission?.map((p: any) => ({ id: p.id, component: p.component, createPermission: !!p.createPermission, // 确保转为boolean类型 viewPermission: !!p.viewPermission, updatePermission: !!p.updatePermission, deletePermission: !!p.deletePermission, })) || [] })); }; useEffect(() => { setRows(transformRoles(roles)); setLoader(false); }, []);
4. 确保INITIAL_DATA的类型正确
给INITIAL_DATA显式指定类型,避免TypeScript自动推断出错:
const INITIAL_DATA: GetAllRolesResponse[] = [ { "id": 1, "roleName": "Client Admin", "description": "This is a client admin", "permission": [{ "id": 1, "component": "Client", "createPermission": true, "viewPermission": true, "updatePermission": true, "deletePermission": true }] }, { "id": 2, "roleName": "Annotator", "description": "This is Annotator", "permission": [{ "id": 1, "component": "Client", "createPermission": true, "viewPermission": true, "updatePermission": true, "deletePermission": true }] }, ];
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

