将函数添加到在声明的命名空间内定义的 class (Typescript)

Add a function to a class defined inside a declared namespace (Typescript)

我正在尝试向命名空间 cc 内定义的现有 class Node 添加一个新函数。命名空间声明如下:

creator.d.ts

declare namespace cc {
   ...
   export class Node extends _BaseNode {
      ...
   }
   ...
}

我的扩展函数尝试如下所示:

NodeExtension.ts

interface cc {
    Node: {
        getWorldPosition(): cc.Vec2;
    }
}
cc.Node.prototype.getWorldPosition = function (this: cc.Node)  {
    return this.parent.convertToWorldSpaceAR(this.getPosition());
};

但我收到错误消息“属性 'getWorldPosition' 在类型 'Node'[= 上不存在34=]" 尝试设置函数时。

creator.d.ts声明文件属于游戏开发框架CocosCreator。

您可以将函数添加到命名空间内的 class,方法是首先创建一个接口 (Node),该接口包装在具有相同名称 (cc) 的命名空间内然后包装在 declare global 语句中,然后通过将接口方法 (getWorldPosition) 添加到要扩展的类型的 .prototype 属性 (cc.Node ).

例子

declare global
{
    namespace cc
    {
        interface Node
        {
            getWorldPosition(): cc.Vec2;
        }
    }
}

cc.Node.prototype.getWorldPosition = function(this: cc.Node)
{
    return this.parent.convertToWorldSpaceAR(this.getPosition());
};

export {}

参考

此解决方案基于此答案: