Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Typescript中重写Response.end的正确方法?_Typescript_Express - Fatal编程技术网

在Typescript中重写Response.end的正确方法?

在Typescript中重写Response.end的正确方法?,typescript,express,Typescript,Express,我正在用Typescript编写一个express会话的替代品(因为我想使用JWT令牌而不是cookie) 在覆盖Response.end时,我遇到了一个障碍(为了在处理请求后保存会话) 签名如下: end(cb?: Function): void; end(chunk: any, cb?: Function): void; end(chunk: any, encoding?: string, cb?: Function): void; 因此,以下工作: const end: {

我正在用Typescript编写一个express会话的替代品(因为我想使用JWT令牌而不是cookie)

在覆盖Response.end时,我遇到了一个障碍(为了在处理请求后保存会话)

签名如下:

end(cb?: Function): void;
end(chunk: any, cb?: Function): void;
end(chunk: any, encoding?: string, cb?: Function): void;
因此,以下工作:

const end: {
                (cb?: Function): void;
                (chunk: any, cb?: Function): void;
                (chunk: any, encoding?: string, cb?: Function): void; 
            } = res.end;
但是,我不确定如何为res.end提供与这些调用签名匹配的替换项

“快速会话”似乎覆盖如下内容:

res.end = function end(chunk, encoding) {
但是,当我尝试提供替代品时:

res.end = function(chunk: any, encoding?: string, cb?: Function)
{

}
编译器抱怨道:

error TS2322: Type '(chunk: any, encoding?: string | undefined, cb?: Function | undefined) => void' is not assignable to type '{ (cb?: Function | undefined): void; (chunk: any, cb?: Function | undefined): void; (chunk: any, ...'.
  Types of parameters 'encoding' and 'cb' are incompatible.
    Type 'Function | undefined' is not assignable to type 'string | undefined'.
      Type 'Function' is not assignable to type 'string | undefined'.
        Type 'Function' is not assignable to type 'string'.
但是,第一个定义确实适用:

res.end = function(cb?: Function): void
{

}
任何建议都将不胜感激

更新:我发现我可以通过将响应对象强制转换为以下任意对象来解决此问题:

(res).end=function(块:any,编码?:string):void
{
调用(res、chunk、encoding);
};

然而,我最初的问题仍然存在:有没有一种方法可以通过键入的方式来实现这一点?

第二个参数可以是编码(字符串)或回调(函数)。您提供的方法不考虑该方案。此外,也不能保证第一个论点会出现。您需要执行以下操作:

res.end = function(chunk?: any, encodingOrCb?: string | Function, cb?: Function): void {

}

我很惊讶你提供的签名是有效的,不是吗:
(cb?:Function):void;|(chunk:any,cb?:Function):void;|(chunk:any,encoding?:string,cb?:Function):voidres.end = function(chunk?: any, encodingOrCb?: string | Function, cb?: Function): void {

}