TypeScript新手求助:调用UserService.searchStaff时提示属性不存在错误
解决“Property 'searchStaff' does not exist on type 'typeof UserService'”错误
嘿,我来帮你理清这个问题!你遇到的报错本质是调用方式和导出方式不匹配,咱们一步步来解决:
错误原因分析
你写的代码里,最后一行是export default new UserService();——这意味着你导出的是UserService类的一个实例对象,而不是类本身。但你调用的时候却用了UserService.searchStaff(),这是在试图直接调用类的静态方法,可你的searchStaff是实例方法,所以TypeScript会报错说类本身(typeof UserService)上没有这个属性。
两种解决方案
方案1:用导出的实例调用方法
既然你已经导出了实例,那直接用这个实例来调用方法就好。调整你的调用代码:
// 导入的时候,拿到的是已经实例化好的对象 import userService from './你的文件路径'; // 用实例调用实例方法 const result = userService.searchStaff();
方案2:把方法改成静态方法
如果你确实想通过UserService.searchStaff()这种类名调用的方式,那需要把searchStaff改成静态方法,给它加上static关键字:
import axios from "axios"; import { Observable } from "rxjs"; class UserService { // 加上static关键字,变成类的静态方法 public static searchStaff(): Observable<any> { return Observable.fromPromise(axios.get("./staffs/search")); } } // 现在导出类本身,而不是实例 export default UserService;
这样再用const result = UserService.searchStaff();就不会报错了。
两种方案的选择
- 如果你需要在
UserService里维护一些实例状态(比如用户token、请求拦截器的配置等),选方案1,用实例的方式更合适。 - 如果
searchStaff只是一个不需要依赖实例状态的工具方法,选方案2,静态方法调用起来更直接。
内容的提问来源于stack exchange,提问作者Suyog K.C
相关产品推荐
相关产品推荐

