TypeScript中如何遍历unknown类型对象并获取token值?
从unknown类型的body中获取access_token的token值
因为Response接口的body类型是unknown,TypeScript会严格限制对它的属性访问和方法调用,必须先通过类型断言或者类型收窄明确其结构,才能获取目标值。
方法一:类型断言(适合确定数据结构的场景)
先定义对应的数据类型,再通过类型断言将body转换为该类型,直接访问属性:
// 定义匹配数据结构的类型 interface AccessTokenInfo { token: string; seconds_to_expire: null | number; } interface ResponseBody { access_token: AccessTokenInfo; } const response: Response = { statusCode: 200, body: { access_token: { token: '123456789012345566', seconds_to_expire: null } } }; // 类型断言后获取token const token = (response.body as ResponseBody).access_token.token; console.log(token); // 输出:123456789012345566
方法二:类型收窄(更安全,适合不确定数据结构的场景)
通过typeof、in操作符逐步验证数据结构,避免直接断言可能带来的错误:
const response: Response = { statusCode: 200, body: { access_token: { token: '123456789012345566', seconds_to_expire: null } } }; let token: string | undefined; // 逐步验证body的结构 if (response.body !== undefined && typeof response.body === 'object') { const body = response.body as Record<string, unknown>; if ('access_token' in body && body.access_token !== null && typeof body.access_token === 'object') { const accessToken = body.access_token as Record<string, unknown>; if ('token' in accessToken && typeof accessToken.token === 'string') { token = accessToken.token; } } } console.log(token); // 输出:123456789012345566
为什么Object.keys()、forEach()之前无法使用?
unknown类型下,TypeScript不允许调用任何方法或访问属性——因为它无法确定该值的具体类型。必须先将类型收窄到object或更具体的类型后,才能使用这些对象方法。
内容的提问来源于stack exchange,提问作者Pinju
相关产品推荐
相关产品推荐

