从JS文件函数返回值解构时如何为属性指定TypeScript类型
解决方案
方法1:临时类型断言(最便捷)
直接对useAuth()的返回值做类型断言即可,不需要修改现有逻辑:
const { apiClient } = useAuth() as { apiClient: JsonServiceClient };
之后使用apiClient就可以正常触发IntelliSense智能提示。
方法2:全局声明useAuth返回类型(一劳永逸)
如果你希望所有调用useAuth()的地方都自动带类型提示,不需要每次都写断言,可以新增类型声明文件:
- 在项目src目录下新建
global.d.ts文件 - 写入以下内容:
declare function useAuth(): { apiClient: JsonServiceClient; // 可补充useAuth返回的其他属性类型 };
后续所有调用useAuth()的地方都会自动识别返回值类型,解构时不需要额外加类型也能获得智能提示。
方法3:单独给apiClient变量做类型断言
如果你只需要给当前用到的apiClient加类型,也可以单独处理:
const { apiClient } = useAuth(); const typedApiClient = apiClient as JsonServiceClient; // 后续使用typedApiClient即可
报错原因说明
你之前的写法是直接给解构左侧的对象做类型标注,但因为useAuth()是JS文件声明的无类型函数,TS默认会推断它的返回值为{}空对象类型,和你标注的{ apiClient : JsonServiceClient }类型不匹配,因此触发了2741错误。类型断言的作用就是显式告诉TS你确定useAuth()的返回值符合预期结构,跳过TS的默认推断校验。
内容的提问来源于stack exchange,提问作者Guerrilla
相关产品推荐
相关产品推荐

