JHipster 8.4.0 Angular项目中如何获取登录用户ID
解决JHipster 8.4.0 Angular项目中无法访问登录用户ID的问题
你遇到的问题是JHipster生成的Account接口未包含id字段,尽管后端返回的账户数据里有该字段,但TypeScript的类型检查会阻止你直接访问。以下是几种无需修改Java代码,仅在Angular组件中解决的方案:
方案1:直接使用类型断言
通过类型断言告诉TypeScript当前account对象包含id字段,快速绕过类型检查:
ngOnInit() { this.primengConfig.ripple = true; this.accountService.getAuthenticationState().subscribe(account => { const userAccount = account as { id: number; [key: string]: any }; this.accountState = userAccount; console.log('用户ID:', userAccount.id); }); }
方案2:定义局部扩展类型
在组件内创建一个继承自Account的局部类型,明确添加id字段,让代码更具可读性:
import { Account } from 'app/core/auth/account.model'; // 局部扩展Account类型,新增id字段 type AccountWithId = Account & { id: number }; ngOnInit() { this.primengConfig.ripple = true; this.accountService.getAuthenticationState().subscribe(account => { const userAccount = account as AccountWithId; this.accountState = userAccount; console.log('用户ID:', userAccount.id); }); }
方案3:使用类型守卫(更安全)
通过类型守卫检查id字段是否存在,避免潜在的运行时错误,同时让TypeScript自动识别字段的存在:
ngOnInit() { this.primengConfig.ripple = true; this.accountService.getAuthenticationState().subscribe(account => { this.accountState = account; // 类型守卫:确保account是对象且包含id字段 if (account && typeof account === 'object' && 'id' in account) { console.log('用户ID:', account.id); // 在此处可安全使用account.id执行搜索操作 } }); }
内容的提问来源于stack exchange,提问作者JackmanBR - Paulo Guerra
相关产品推荐
相关产品推荐

