Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 通过模块扩充将方法添加到外部类:错误_Typescript - Fatal编程技术网

Typescript 通过模块扩充将方法添加到外部类:错误

Typescript 通过模块扩充将方法添加到外部类:错误,typescript,Typescript,这看起来很琐碎,但我没能让它工作。 我在外部npm依赖项中有一个类集合(比如packagename)。在我当前的项目中,我想向该类的原型添加一些方法,并告知TS这一事实 在外部模块中,类的定义如下: 导出类集合{ // ... } 下面是我在项目的external.d.ts文件中写的内容: 从“packagename”导入{Document}; 声明模块“packagename”{ 导出接口集合{ 新方法():承诺; } } 但在另一个文件中: 从“packagename”导入{Collec

这看起来很琐碎,但我没能让它工作。 我在外部npm依赖项中有一个类
集合
(比如
packagename
)。在我当前的项目中,我想向该类的原型添加一些方法,并告知TS这一事实

在外部模块中,类的定义如下:

导出类集合{
// ...
}
下面是我在项目的
external.d.ts
文件中写的内容:

从“packagename”导入{Document};
声明模块“packagename”{
导出接口集合{
新方法():承诺;
}
}
但在另一个文件中:

从“packagename”导入{Collection}
Collection.prototype.newMethod=函数(此:集合){
// ...
};
失败,出现以下错误:

TS2693: 'Collection' only refers to a type, but is being used as a value here.
如果我将
Collection
import*作为“packagename”中的所有内容导入,则情况也是一样的
everything.Collection

我错过了什么?谢谢

  • Typescript允许您扩展接口(您所做的),但接口只是一个类型(没有您所看到的实现)

  • 我不明白你需要用那种方式扩展课程。为什么不在现有类的基础上创建一个子类呢?这似乎是一种扩展类的正确方法,而不是通过原型扩展进行修补

  • 在这些地方之后,您只需要导入并使用这个新类


    您有充分的理由不这样做吗?

    因此它似乎不起作用,因为从
    packagename
    导入是在一个
    index.ts
    文件中重新导出的导入,该文件只聚合了其他文件。以我想要扩充的类的确切源文件为目标似乎是可行的:

    从“packagename”导入{Document};
    声明模块“packagename/dist/collection”{
    导出接口集合{
    新方法():承诺;
    }
    }
    

    给了我提示。

    因为那样我就不能使用
    newMethod
    ,例如对外部包返回的
    集合
    (这是我无法控制的类型)。模块扩充应该可以解决这个问题。例子:
    import { Collection } from "packagename"
    
    export class ExtendedCollection extends Collection {
      newMethod() {
    
      }
    }