跨多个模块的TypeScript模块扩充

时间:2016-12-19 03:53:19

标签: javascript node.js typescript commonjs

我正在尝试修改另一个模块内的对象原型(类似于演示here)。但是,模块扩充似乎仅在扩充在同一模块中的所需文件中声明的对象而不是另一个模块时才起作用。

例如,我有一个班级TestClass

// some-module/TestClass.ts

export class TestClass {
    someValue: string = "hi";
    someFunc(): number {
        return 5;
    }
}

在同一个模块中,我有这个:

// some-module/index.ts

import { TestClass } from "./TestClass";

declare module "./TestClass" {
    interface TestClass {
        doSomethingElse(): void;
    }
}

TestClass.prototype.doSomethingElse = function(): void {
    console.log("Something else");
};

这很好用。但是,如果我将TestClass移动到另一个模块(test-module/TestClass.ts)并像这样适当地修改代码,那么每当我尝试访问'TestClass' only refers to a type, but being used as a value here.时,它都会给出错误TestClass。< / p>

// some-module/index.ts

import { TestClass } from "test-project";

declare module "test-project" {
    interface TestClass {
        doSomethingElse(): void;
    }
}

TestClass.prototype.doSomethingElse = function(): void {
    console.log("Something else");
};

我正在使用CommonJS的NodeJS模块解析。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

这是因为您需要导入整个模块而不是您需要的导入*,请参阅https://github.com/Microsoft/TypeScript/issues/9015