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

TypeScript访问对象属性报'name不存在于never类型'错误如何解决

报错原因

TypeScript 抛出该错误的核心是类型推断链路出现了问题,即使你手动给user标注了IUser | null类型,依然存在优先级更高的错误类型定义:

  1. 你自定义的useAppSelector没有正确绑定Redux全局状态的RootState类型,导致返回值类型推断失效
  2. 你的RootState类型定义中user字段被错误定义为了never类型,TypeScript 认为user永远不可能为真,因此三元表达式中user为真的分支会被收窄为never类型,自然不存在name属性。
    运行时可以正常打印是因为TypeScript类型检查仅在编译阶段生效,实际运行的JS代码没有类型限制。
解决方法
  • 修正RootState类型定义,确保user字段关联正确的IUser | null类型
// 你的Redux store定义文件
import { combineReducers } from '@reduxjs/toolkit'
import userReducer from './userSlice'

const rootReducer = combineReducers({
  user: userReducer, // 确保userReducer的state初始值和类型匹配IUser | null
})

export type RootState = ReturnType<typeof rootReducer>
  • 确保useAppSelector正确绑定RootState类型
// 你的自定义hooks文件
import { TypedUseSelectorHook, useSelector } from 'react-redux'
import type { RootState } from './store'

// 必须显式指定useAppSelector关联RootState,否则类型推断会失效
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
  • 临时绕过方案(不推荐,优先修正类型定义):使用类型断言强制指定类型
{ user ? 
  <button className={style.header__button}> {(user as IUser).name} </button> :
  <button className={style.header__button} onClick={btn_click}> Reg </button>
}

补充:你提供的代码中遗漏了FC、useState的导入,若实际代码中也未导入也需要补充对应导入语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:04