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
相关产品推荐
相关产品推荐

