已显式指定类型仍报useState隐式any返回类型错误如何解决?
useState隐式返回any类型报错解决方案
报错根本原因
你触发该错误的核心原因是在类组件中违规使用React Hook:React Hook(包括useState)仅允许在函数组件、自定义Hook中调用,禁止在class类组件内直接使用。
你当前声明的ManagePreSalesBDMsApp是继承React.Component的类组件,在类体中直接写const [data, setData] = useState<IBDMRecord[]>([])不符合React语法规范,类型系统无法识别Hook调用逻辑,因此抛出类型报错,和你定义的IBDMRecord类型没有关系。
两种修复方案
- 方案1:保留类组件写法,用类组件原生state管理状态,替换Hook用法
interface IBDMRecord { businessDevelopmentResourceId: number; referenceName: string; } // 把你的状态字段放到IAppState中声明 interface IAppState { data: IBDMRecord[] // 其他你需要的state字段 } class ManagePreSalesBDMsApp extends React.Component<IAppProps, IAppState> { // 初始化state state: IAppState = { data: [] } static defaultProps: IAppProps = { baseUrl: (window as any).SERVER_BASE_URL, systemVersion: (window as any).SYSTEM_VERSION } // 后续更新state统一用this.setState方法 // 示例:更新data时执行 this.setState({data: 新的IBDMRecord数组}) }
- 方案2:重构为函数组件(和你后续更新提到的解决方案一致)
interface IBDMRecord { businessDevelopmentResourceId: number; referenceName: string; } // 改为函数组件写法 const ManagePreSalesBDMsApp: React.FC<IAppProps> = (props) => { // 此处的useState调用符合语法规范,不会再触发类型报错 const [data, setData] = useState<IBDMRecord[]>([]); // 组件其他逻辑 return <>{/* 组件渲染内容 */}</> } ManagePreSalesBDMsApp.defaultProps = { baseUrl: (window as any).SERVER_BASE_URL, systemVersion: (window as any).SYSTEM_VERSION }
内容的提问来源于stack exchange,提问作者tequacreek
相关产品推荐
相关产品推荐

