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

如何提取TypeScript接口成员类型传入useState泛型参数

错误原因

typeof MyState.balances 写法不生效的核心原因:MyState是TypeScript的interface类型,仅存在于类型检查阶段,不是运行时存在的JS值。而typeof只能对值空间的实体做类型推导,无法直接作用在类型定义的属性访问上。

正确写法

使用TypeScript的索引访问类型语法提取指定属性的类型即可,语法格式为类型名['属性名'],对应代码如下:

interface MyState {
  balances: { [address: string]: BN };
}

const [state, setState] = useState<MyState['balances']>({});

这里MyState['balances']会精准匹配到你定义的{ [address: string]: BN }类型,完全符合useState泛型参数的要求。

注意事项
  • 类型空间取属性必须使用方括号包裹字符串属性名的写法,不能用点操作符,点操作符仅适用于JS运行时存在的值对象。
  • 该写法会自动继承原属性的所有类型约束,后续调用setState更新值时,TS会自动做类型校验,不符合{ [address: string]: BN }格式的入参会直接抛出类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:42:16