【问题标题】:Ambient declations for javascript modules that add fields to interfaces in other modules将字段添加到其他模块中的接口的 javascript 模块的环境声明
【发布时间】:2013-08-26 13:19:00
【问题描述】:

假设我想使用 express 之类的东西。所以我加了

/// <reference path=".../express.d.ts" />
import express = require("express");

然后可以使用 ExpressServerRequest 等类型。

到目前为止一切顺利。但现在我想使用例如 connect-flash javascript 模块。这为 ExpressServerRequest 添加了一个额外的 flash 功能。我正在努力了解如何 定义 connect-flash.d.ts 以便 req.flash() 在 ExpressServerRequest 的实例上定义,如果我已经导入了 connect-flash 模块,而不是另外定义。这种行为可以在 TypeScript 中捕获吗?

【问题讨论】:

    标签: node.js typescript ambient


    【解决方案1】:

    如果你要扩展的项目是一个接口,它们在 TypeScript 中是打开的,所以你可以像这样添加额外的:

    interface ExpressServerRequest {
        myAdditionalThing(): void;
    }
    

    有很多方法可以声明任何东西,所以如果这不是您的案例的技巧,只需发布​​现有的 ExpressServerRequest,我将更新示例。我检查过的 express.d.ts 的版本肯定有类型有 ExpressServerRequest 作为接口。

    【讨论】:

    • 谢谢史蒂夫。但是,我想要的是在 connect-flash.d.ts 文件中扩展接口。如果我这样做,并同时引用 express.d.ts 和 connect-flash.d.ts,我希望 ExpressServerRequest 会在调用代码中得到扩展。但是,这似乎没有发生,所以我必须在调用者中再次扩展接口。那么你将如何定义一个 myAdditionalThing.d.ts 文件来扩展 ExpressServerRequest 以便如果调用者引用了两个 d.ts 文件,他们可以使用该属性,但如果他们没有引用 myAdditionalThing.d.ts 它将不可见?
    • 嗨@Steve,关于我正在尝试做的事情目前在 TypeScript 中是否可行的任何想法。
    猜你喜欢
    • 2016-08-30
    • 2018-10-20
    • 1970-01-01
    • 2012-10-12
    • 2012-11-08
    • 2014-10-16
    • 2015-10-17
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多