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

Posted

技术标签:

【中文标题】将定义添加到 Typescript 中的现有模块【英文标题】:Add definition to existing module in Typescript 【发布时间】:2018-02-26 19:16:45 【问题描述】:

我正在努力使用 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;

但它不起作用,现在它说“重复标识符'响应'”。

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

【问题讨论】:

【参考方案1】:

您可以使用interface merging。

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

【讨论】:

我已经尝试过了,它完全“删除”了原来的 'restify' 并将它放在它的位置上,因此现在 typescript 唯一知道的是 Response.out @libik 你需要导入你想要扩展的原始接口。查看更新的答案。

以上是关于将定义添加到 Typescript 中的现有模块的主要内容,如果未能解决你的问题,请参考以下文章

如何向 TypeScript/JSX 中的现有 HTML 元素添加属性?

如何将标识属性添加到 SQL Server 中的现有列

将 typescript 定义文件与 nodejs 混合需要内部模块中的多个文件

将现有模块更新到 Odoo 12 中的最新版本

将 sass/css 模块添加到 typescript react app

typescript 将http拦截器添加到模块