如何将“TypeScript风格”的原型函数添加到外部模块?

时间:2016-11-12 10:28:49

标签: typescript prototype

我想修改nodejs IntFunction<String[][]> createArray2D = n -> new String[n][n];模块的原型。

module有一个为此定义的接口(@types/node),但在NodeModule模块时没有任何内容,所以我必须import

require

问题是模块没有任何定义。以import * as Module from "module"; // Error var Module = require("module"); // Ok 返回。

我有这个

any

我必须创建自己的export interface CustomNodeModule extends NodeModule { __thingy:()=>void; } Module.prototype.__thingy = function() { // things! } 接口,但是,如何修改CustomNodeModule原型以及这些函数是否知道它们是Module实例的一部分?

2 个答案:

答案 0 :(得分:2)

由于TypeScript接口是开放式的,因此您不需要创建另一个接口,您可以使用您的方法扩展现有接口。

export interface NodeModule {
    __thingy:()=>void;
}

答案 1 :(得分:1)

在某个全局文件(没有导入/导出的文件)中,添加以下内容:

declare module "module" {
    export = Module;

    var Module: ModuleConstructor;

    interface ModuleConstructor {
        new (id: any, parent: any): NodeModule;
        readonly prototype: NodeModule;

        Module: typeof Module;
        globalPaths: string[];
        /** @deprecated */
        requireRepl(...args: string[]): any;
        runMain(): void;
        wrap(script: any): any;
        wrapper: string[];
    }
}
  

注意:可能会接受向此发送一个拉请求到DefinitelyTyped。

然后,在实际处理新属性的模块中,您可以写:

import m = require("module");

// This is a *global augmentation*.
// It adds to declarations in the global scope.
declare global {
    interface NodeModule {
        __thingy: () => void;
    }
}

m.prototype.__thingy = function() {
    // ...
};