在Angular的pipe(map(...))返回语句中如何定义返回对象的类型?
解决方案
首先你需要定义匹配存储返回结构的接口,再对Storage.get的返回值做类型标注即可解决报错,具体实现如下:
步骤1:定义存储数据接口
你可以直接在当前业务文件顶部定义,也可以抽离到全局的类型定义文件中:
// 专用于authData存储结构的接口 interface StorageAuthData { key: string; value: string; } // 如果需要适配所有存储键值对,也可以定义通用泛型接口 interface StorageResult<T = any> { key: string; value: T; }
步骤2:给storedData指定类型
有两种常用实现方式可选:
方式1:在回调参数中做类型断言
直接修改你的业务代码如下:
return from(Storage.get({ key: 'authData' })).pipe(map(storedData => { // 明确告知TS storedData的实际结构 const typedData = storedData as StorageAuthData | null; if (!typedData || !typedData.value) { return null; } const parsedData = JSON.parse(typedData.value) // 后续业务逻辑 }
方式2:给from操作符指定泛型
更规范的做法是直接给Observable指定返回类型:
return from<StorageAuthData | null>(Storage.get({ key: 'authData' })).pipe(map(storedData => { if (!storedData || !storedData.value) { return null; } const parsedData = JSON.parse(storedData.value) // 后续业务逻辑 }
扩展优化
如果需要提取解析后parsedData的属性,也可以给JSON.parse指定返回类型,避免后续二次类型报错:
// 提前定义你存储的令牌结构 interface AuthToken { accessToken: string; expireTime: number; userId: string; } // 解析时指定类型 const parsedData = JSON.parse(typedData.value) as AuthToken;
内容的提问来源于stack exchange,提问作者d3Roux
相关产品推荐
相关产品推荐

