0

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

创建者.d.ts

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

我的扩展功能尝试看起来像:

节点扩展.ts

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

但是我在尝试设置函数时收到错误“ Property 'getWorldPosition' does not exist on type 'Node' ”。

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

4

1 回答 1

1

您可以通过首先创建一个接口 ( 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 {}

参考

该解决方案基于此答案: https ://stackoverflow.com/a/53392268/5946094

于 2021-06-03T17:05:06.417 回答