Typescript 错误TS2345:类型为';(响应:字符串)=>;无效';不可分配给类型为';((值:{})=>;无效|承诺<;无效>;)|无效
我通过npm更新了我的typescript包,现在我发现了错误: “TS2345:类型为“(响应:字符串)=>void”的参数不能分配给类型为“((值:{})=>void | PromiseLike)| null |未定义”的参数” 尝试编译以下代码时:Typescript 错误TS2345:类型为';(响应:字符串)=>;无效';不可分配给类型为';((值:{})=>;无效|承诺<;无效>;)|无效,typescript,Typescript,我通过npm更新了我的typescript包,现在我发现了错误: “TS2345:类型为“(响应:字符串)=>void”的参数不能分配给类型为“((值:{})=>void | PromiseLike)| null |未定义”的参数” 尝试编译以下代码时: private _send<T>(urlPath: string, params?: RequestParams): Promise<T> { return this._requester.sendRequest
private _send<T>(urlPath: string, params?: RequestParams): Promise<T> {
return this._requester.sendRequest<T>(this._datafeedURL, urlPath, params);
}
public getServerTime(callback: ServerTimeCallback): void {
this._send('time')
.then((response: string) => {
const time = parseInt(response);
if (!isNaN(time)) {
callback(time);
}
})
.catch((error?: string | Error) => {
logMessage(`Failed to load server time, error=${getErrorMessage(error)}`);
});
}
private\u发送(urlPath:string,params?:RequestParams):承诺{
返回此._requester.sendRequest(此._datafeedURL、urlPath、params);
}
公共getServerTime(回调:ServerTimeCallback):无效{
这个。_发送(‘时间’)
。然后((响应:字符串)=>{
const time=parseInt(响应);
如果(!isNaN(时间)){
回调(时间);
}
})
.catch((错误?:字符串|错误)=>{
logMessage(`加载服务器时间失败,错误=${getErrorMessage(错误)}`);
});
}
错误来自.then行
我读过其他类似的问题,但我无法理解我的案例中的问题。签名
_send<T>(urlPath: string, params?: RequestParams): Promise<T>;
这将允许您的调用成功编译。请注意,通过显式地将类型参数T
设置为string
,您相信异步调用将在运行时实际返回一个string
。\u send()
的签名似乎保证它将为调用方指定的T
的任何值返回一个Promise
,但显然它不能在运行时真正这样做。所以要小心
希望这能有所帮助。祝你好运 你能给我们看一下\u send
方法体吗?或者至少它的返回类型是什么?谢谢,但现在我们需要更深入。Typescript无法推断T
的类型,因此它得到了一个默认类型{}
(这太广泛了,导致了您看到的问题)。要了解该推断不起作用的原因,我们需要知道this.\u requester.sendRequest
的签名。这是什么类型的。\u请求者
,如果可能,您能否为其发送请求
方法发布代码?或者如果它来自图书馆,你能告诉我们是哪个吗?看起来你真的应该说这个。_send('time')
。
this._send<string>('time')