将函数添加到在声明的命名空间内定义的 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 {}
参考
此解决方案基于此答案:
我正在尝试向命名空间 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 {}
参考
此解决方案基于此答案: