如何提取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
相关产品推荐
相关产品推荐

