TypeScript中如何直接访问StateEntry类型对象的唯一state键值
实现方案
根据你的业务兼容需求,有两种可选的处理方式:
方案一:调整接口定义(优先推荐)
原有索引签名的写法本身就不符合你「每个实例仅存一个state键」的业务约定,调整为显式属性的写法后,不仅能满足你直接调用.state的需求,还能获得更完善的类型校验:
// 调整后的接口 interface StateEntry { state: string; metaState: string; }
对应的实例结构调整为:
const state1: StateEntry = { state: "NEW", metaState: "ACTIVE" }
此时你可以直接按需求调用:
arr[0].state === 'NEW'
如果state值是固定的枚举值,可以进一步收紧类型,获得更精准的类型提示:
type StateEnum = 'NEW' | 'PENDING' | 'CLOSED' type MetaStateEnum = 'ACTIVE' | 'DISABLED' interface StateEntry { state: StateEnum; metaState: MetaStateEnum; }
方案二:不修改现有接口,封装取值工具
如果已有大量业务代码依赖原有结构,改造成本过高,可以封装一个通用工具函数隐藏Object.keys的实现细节:
function getState(entry: StateEntry): string { const stateKeys = Object.keys(entry) // 可选:加结构校验,避免不符合约定的实例导致取值异常 if (stateKeys.length !== 1) { throw new Error('StateEntry实例仅允许存在1个自定义state键') } return stateKeys[0] }
调用时直接使用即可:
getState(arr[0]) === 'NEW'
内容的提问来源于stack exchange,提问作者Maxime B
相关产品推荐
相关产品推荐

