javascript - 将定义添加到 Typescript 中的现有模块

标签 javascript node.js typescript node-modules

我正在努力使用 Typescript 并修改现有模块的定义。

我们习惯把任何我们想输出的东西放到“res.out”中,最后会有类似“res.json(res.out)”这样的东西。这使我们能够在发送响应时对应用程序进行总体控制。

所以我有这样的功能

export async function register(req: Request, res: Response, next: Next) {
    try {
        const user = await userService.registerOrdinaryUser(req.body)
        res.status(201);
        res.out = user;
        return helper.resSend(req, res, next);
    } catch (ex) {
        return helper.resError(ex, req, res, next);
    }
};

我们正在使用 restify。我得到了编译错误,因为“out”不是 restify.Response 的一部分。

现在我们有了解决方法,即我们拥有“自己的”对象,它扩展了 Restify 对象。

import {
    Server as iServer,
    Request as iRequest,
    Response as iResponse,
} from 'restify'

export interface Server extends iServer {
}

export interface Request extends iRequest {
}

export interface Response extends iResponse {
    out?: any;
}

export {Next} from 'restify';

我们这样做只是为了使项目可编译,但正在寻找更好的解决方案。我试过这样的事情:

/// <reference types="restify" />

namespace Response {
    export interface customResponse;
}

interface customResponse {
    out?: any;
}

但它不起作用,现在它显示“重复标识符‘Response’”。

那么有人如何使用一些简单的代码向 restify.Response 对象添加定义吗?

最佳答案

您可以使用 interface merging .

import {  Response } from "restify";
declare module "restify" {
    interface Response {
        out?: any
    }
}    

关于javascript - 将定义添加到 Typescript 中的现有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46276117/

相关文章:

javascript addEventListener 和 runtime.onMessage.addListener

javascript - div 100% 页面高度,无垂直滚动

javascript - Chrome Developer Console 中不同颜色的变量类型是什么?

javascript - 单击主自定义复选框打开一个复选框组

node.js - 如何在node.js上使用请求模块设置POST编码?

sql-server - 如何从 SQL Server 传输 200 万行而不导致 Node 崩溃?

javascript - turf.js 可以用来查找和修复错误的 geojson 几何图形吗?

typescript 继承扩展属性

javascript - 在函数调用中使用类型变量时出错

javascript - 在使用 typescript 的 Jasmine 测试中注入(inject) $http 失败