首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性“push”类型缺失(请求: NtlmRequest,响应:响应) => void‘

属性“push”类型缺失(请求: NtlmRequest,响应:响应) => void‘
EN

Stack Overflow用户
提问于 2018-03-15 15:28:12
回答 1查看 1.4K关注 0票数 2

我想简单地使用一个自定义属性从Express框架扩展Request对象:

代码语言:javascript
复制
import express = require('express')

export interface NtlmRequest extends express.Request {
     ntlm: NtlmInfo
}

它被用作express.Request的参数类型。

代码语言:javascript
复制
let app = express();
app.all('*', (request:NtlmRequest, response:Response) => {
    console.log(request.ntlm.UserName)
});

app.listen(1243)

NtlmInfo是另一个只包含如下字符串属性的接口:

代码语言:javascript
复制
export interface NtlmInfo { UserName: string  [...] }

但是,这给了我一个错误,即请求类型不兼容:

代码语言:javascript
复制
error TS2345: Argument of type '(request: NtlmRequest, response: Response) => void' is not assignable to parameter of type 'RequestHandlerParams'.
  Type '(request: NtlmRequest, response: Response) => void' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'.
    Property 'push' is missing in type '(request: NtlmRequest, response: Response) => void'.

我无法理解这一点,因为我继承了原始的express.Request对象,并查看了类型定义,其中没有任何push属性。

安装了下列软件包:

代码语言:javascript
复制
"dependencies": {
    "express": "^4.16.2",
    "express-ntlm": "^2.2.4"
  },
  "devDependencies": {
    "@types/express": "^4.11.1",
    "@types/node": "^9.4.7",
    "typescript": "^2.7.2"
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 15:37:20

您的代码有两个问题。第一个很容易修复,对于response,我相信您正在使用lib.d.ts版本的Response。你应该使用express.Response

第二个问题则更加微妙。要使用NtlmRequest作为请求类型,您需要使ntlm成为可选的。编译器,期望all将接受一个具有第一个参数express.Request的函数,因此您传递的函数不能要求第一个参数具有比express.Request更多的属性

代码语言:javascript
复制
export interface NtlmRequest extends express.Request {
     ntlm?: NtlmInfo
}
//Will work
app.all('*', (request:NtlmRequest, response:express.Response) => {
    console.log(request.ntlm.UserName)
});

另一种选择是扩展全局快递Request。这将将ntlm属性添加到all请求实例:

代码语言:javascript
复制
import * as express from 'express'
interface NtlmInfo { UserName: string}
declare global {
    namespace Express {
        export interface Request {
            ntlm: NtlmInfo
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49303375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档