跨多个模块的 TypeScript 模块扩充

TypeScript module augmentation across multiple modules

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

比如我有一个class,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 时它都会给我错误 'TestClass' only refers to a type, but being used as a value here.

// 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 模块解析。

如有任何帮助,我们将不胜感激。

这是因为您需要使用 import * 导入整个模块,而不仅仅是您需要的 class,参见 https://github.com/Microsoft/TypeScript/issues/9015