![](/img/trans.png)
[英]Express.js/Typescript: Error TS2339: Property 'send' does not exist on type 'Response'
[英]TypeScript gives me an error of Property Does Not Exist on Type Response
所以,我有一个自定义的高级结果页面 - 它允许/articles?name=""
等等。
第一次使用TypeScript,所以我正在迁移我的代码。
但是,我到了最后一部分,它给了我一个 typescript 错误。
// eslint-disable-next-line no-unused-vars
import {Request, Response, NextFunction} from 'express';
// eslint-disable-next-line max-len
const advancedResults: any = (model: any, populate: string) => async (req: Request, res: Response, next: NextFunction) => {
let query: any;
// Copy req.query
const reqQuery = {...req.query};
// Fields to exclude
const removeFields = ['select', 'sort', 'page', 'limit'];
// Loop over removeFields and delete them from reqQuery
removeFields.forEach((param) => delete reqQuery[param]);
// Create query string
let queryStr = JSON.stringify(reqQuery);
// Create operators ($gt, $gte, etc)
// eslint-disable-next-line max-len
queryStr = queryStr.replace(/\b(gt|gte|lt|lte|in)\b/g, (match) => `$${match}`);
// Finding resource
query = model.find(JSON.parse(queryStr));
// Select Fields
if (req.query.select) {
const fields = (<string>req.query.select).split(',').join(' ');
query = query.select(fields);
}
// Sort
if (req.query.sort) {
const sortBy = (<string>req.query.sort).split(',').join(' ');
query = query.sort(sortBy);
} else {
query = query.sort('-createdDate');
}
// Pagination
const page = parseInt(<string>req.query.page, 10) || 1;
const limit = parseInt(<string>req.query.limit, 10) || 25;
const startIndex = (page - 1) * limit;
const endIndex = page * limit;
const total = await model.countDocuments();
query = query.skip(startIndex).limit(limit);
if (populate) {
query = query.populate(populate);
}
// Executing query
const results = await query;
// Pagination result
const pagination: any = {};
if (endIndex < total) {
pagination.next = {
page: <any>page + 1,
limit,
};
}
if (startIndex > 0) {
pagination.prev = {
page: <any>page - 1,
limit,
};
}
res.advancedResults = { // Error here, Property 'advancedResults' does not exist on type 'Response<any>'
success: true,
count: results.length,
pagination,
data: results,
};
next();
};
export default advancedResults;
我已经添加了任何类型......等等。 我在以前的代码中做错了什么吗? 我需要重做整个 function 吗? 让我知道这是否正确。 我搜索了具有相同行的其他问题,在我看来,它没有回答我的问题。 我认为这是一个特例。 谢谢!
正如亚历克斯·韦恩(Alex Wayne)在上面的评论中所发布的,以及任何遇到此线程的人。 答案在于他提供的链接: 这里
第 1 步: Go 进入您的root folder/node_modules/@types/express/index.d.ts
文件。
第 2 步:在export = e;
之后添加以下代码
declare global{
namespace Express {
interface Response {
yourCustomResponse: yourType
}
}
}
第 3 步:完成后,保存该文件并导航到您的tsconfig.json
。
第 4 步:将此"./node_modules/@types
./node_modules/@types”添加到"typeRoots"
以确保 TypeScript 正在读取全局响应。
希望这能回答您的问题,再次感谢所有向我发表评论并帮助我度过难关的人。 @jcalz @亚历克斯·韦恩
可以在此处的 Typescript 文档中的声明合并下找到更多信息
为什么我不能在 global.d.ts 中写入?
declare module 'express' {
export interface Response<T = any> {
customCb: (data: T) => void;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.