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

如何在TypeScript+React项目中给useState设置指定类型的对象初始值?

错误原因

  1. 你定义的TAssetsOverview类型下4个属性均为必选属性,传入空对象{}作为useState初始值时,缺少全部必选属性,不符合类型约束,触发第一个报错。
  2. 第二种写法使用了对象属性简写语法{ totalAssets },该语法的前提是当前作用域下存在已经定义好的同名变量totalAssets,你没有提前定义这些变量,因此触发变量未定义的报错。

解决方案

方案1:设置完整初始值(最推荐,符合类型安全规范)

直接给每个属性赋予符合类型的初始值,数值类属性默认设为0即可:

type TAssetsOverview = {
    totalAssets: number,
    assetsInOperation: number,
    assetsInAlert: number,
    assetsInDowntime: number
}

const AssetsOverview: React.FC = () => {
    const [overview, setOverview] = React.useState<TAssetsOverview>({
        totalAssets: 0,
        assetsInOperation: 0,
        assetsInAlert: 0,
        assetsInDowntime: 0
    })
    // 后续获取到真实数据后调用setOverview覆盖即可
    return (
        <div>
            {/* 注意原代码中assets变量未定义,这里应该是overview? */}
            <AssetsList assets={overview} />
        </div>
    )
}

方案2:初始无值,后续才会赋值的场景

如果你的初始状态确实是空,要等接口返回数据后才会赋值,可以调整类型允许属性可选:

// 将属性设为可选
type TAssetsOverview = {
    totalAssets?: number,
    assetsInOperation?: number,
    assetsInAlert?: number,
    assetsInDowntime?: number
}

const [overview, setOverview] = React.useState<TAssetsOverview>({})

也可以给泛型增加联合类型,允许state初始为null,后续使用时做非空判断即可:

const [overview, setOverview] = React.useState<TAssetsOverview | null>(null)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:39:03