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

TypeScript递归JSON类型不接受变量作为节点值的问题求助

解决你的TypeScript对象创建问题

问题1:动态属性名编译错误

直接用this.loggedUser.getName()作为属性名不符合语法规则,TypeScript(以及JavaScript)中若要使用表达式作为对象属性名,必须用**方括号[]**包裹表达式。修改后的代码:

let obj = {
  [this.loggedUser.getName()]: { 
    startDate: new Date().getTime() 
  }
}

问题2:创建users结构的对象而非数组

你不需要用数组,直接定义精确的类型来匹配目标结构,替代宽泛的JSONValue,既能保证类型安全,又能直接构建你需要的对象:

步骤1:定义精确类型

// 单个用户会话的类型
type UserSession = {
  startDate: number;
};

// 所有用户会话的类型:键为用户名(字符串),值为UserSession
type UserSessions = {
  [username: string]: UserSession;
};

步骤2:初始化并操作对象

// 初始化空的用户会话对象
let sessions: UserSessions = {};

// 给当前登录用户添加会话
const currentUsername = this.loggedUser.getName();
sessions[currentUsername] = { 
  startDate: new Date().getTime() 
};

// 后续添加其他用户会话示例
sessions["user2"] = { 
  startDate: new Date().getTime() 
};

为什么不用JSONValue?

JSONValue是覆盖多种类型的宽泛定义,无法精准描述你需要的“用户名为键、会话对象为值”的结构。使用精确类型能让TypeScript提供严格的类型检查,编码时还能获得自动提示,避免不必要的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:04