在Typescript中重写Response.end的正确方法?
我正在用Typescript编写一个express会话的替代品(因为我想使用JWT令牌而不是cookie) 在覆盖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: {
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):void实际上,我只是直接从Typescript编译器的错误输出中复制了我正在使用的语法。它是有效的,我想这只是表达同一事物的另一种方式。
res.end = function(chunk?: any, encodingOrCb?: string | Function, cb?: Function): void {
}