Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 使用TypeScript扩展Express Request对象大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解TypeScript和各种指南,了解如何使用Node.js并表达关于在将request属性传递给中间件之前向request对象添加属性的讨论.

当然,对于类型脚本,必须定义这些属性,所以我尝试在名为local.d.ts的文件中这样做:

/// <reference path="tsd.d.ts" />
import MysqL = require('MysqL');
declare module Express {
    export interface request {
        dbPool: MysqL.IPool;
    }
}

然后我尝试从我的主代码文件调用它:

/// <reference path="typings/tsd.d.ts" />
/// <reference path="typings/local.d.ts" />
...
import express = require('express');
...
var pool = MysqL.createPool({
    user: "username",...
});
app.use(function (req,res,next) {
    req.dbPool = pool;
});

但我得到:“属性’dbPool’在’request’类型上不存在.”
我究竟做错了什么?

解决方法

作为解决方法,您可以从express.request继承接口:

declare module 'MysqL' {
    import express = require('express');

    interface request extends express.request {
        dbPool: IPool;
    }
}

然后在您的代码中转换请求:

(<MysqL.request>req).dbPool...

一个选择是从express.d.ts中删除函数声明:

declare module "express" {
    import * as http from "http";

    //- function e(): e.Express;
    //-
    //- module e {

        interface I_1 {
        }

        ...

        interface I_N {
        }

    //- }
    //-
    //- export = e;
}

并将接口扩展为:

declare module 'express' {
    import MysqL = require('MysqL');

    interface Express {
        dbPool: MysqL.IPool;
    }
}

但之后你需要在调用之前转换模块:

var exp = <express.Express>(<any>express)();

大佬总结

以上是大佬教程为你收集整理的node.js – 使用TypeScript扩展Express Request对象全部内容,希望文章能够帮你解决node.js – 使用TypeScript扩展Express Request对象所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。