Typescript 错误TS2345:类型为';(响应:字符串)=>;无效';不可分配给类型为';((值:{})=>;无效|承诺<;无效>;)|无效

Typescript 错误TS2345:类型为';(响应:字符串)=>;无效';不可分配给类型为';((值:{})=>;无效|承诺<;无效>;)|无效,typescript,Typescript,我通过npm更新了我的typescript包,现在我发现了错误: “TS2345:类型为“(响应:字符串)=>void”的参数不能分配给类型为“((值:{})=>void | PromiseLike)| null |未定义”的参数” 尝试编译以下代码时: private _send<T>(urlPath: string, params?: RequestParams): Promise<T> { return this._requester.sendRequest

我通过npm更新了我的typescript包,现在我发现了错误:

“TS2345:类型为“(响应:字符串)=>void”的参数不能分配给类型为“((值:{})=>void | PromiseLike)| null |未定义”的参数”

尝试编译以下代码时:

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')