如何将解构数组作为参数调用泛型方法,能否使用.apply实现?
报错原因
你遇到的问题属于TypeScript语法解析优先级问题:当你直接书写this.getAsync<T>.apply时,编译器会将<误识别为小于比较运算符,而非泛型参数的起始标识,因此抛出语法错误。泛型方法本身支持通过apply/call/bind调用,不存在功能层面的限制。
解决方案
方案1:修正apply调用写法
给泛型方法的引用包一层圆括号,明确解析优先级即可正常运行:
public getObservable<T>(...params: Parameters<HttpService['getAsync']>): Observable<T> { const request = (this.getAsync<T>).apply(this, params); return from(request); }
方案2(更推荐):使用展开运算符传参
不需要借助apply,直接用数组展开语法传递参数,写法更简洁直观,可读性更高:
public getObservable<T>(...params: Parameters<HttpService['getAsync']>): Observable<T> { const request = this.getAsync<T>(...params); return from(request); }
关于类型声明的说明
你采用Parameters<HttpService['getAsync']>自动推导参数类型的方案是合理的,可以完全满足需求:当getAsync的参数定义发生变更时,getObservable的参数类型会自动同步更新,无需手动维护静态类型定义,没有额外优化的必要。
内容的提问来源于stack exchange,提问作者Carlos Benedetti
相关产品推荐
相关产品推荐

