Node.js TypeScript合并声明组合不';如果目标类被扩展,则无法工作
我需要使用一个已经扩展的TypeScriptNode.js TypeScript合并声明组合不';如果目标类被扩展,则无法工作,node.js,typescript,mixins,composition,es6-class,Node.js,Typescript,Mixins,Composition,Es6 Class,我需要使用一个已经扩展的TypeScript类,并与其他一些人一起编写它。我发现这篇文章(以及其他一些类似的文章)展示了一种我认为可以使用的模式: 下面是我的困境的一个例子,使用上面文章中的示例代码作为最小的复制 工作测试ts(原件) //每个mixin都是一个传统的ES类 类跳线{ 跳转(){} } 班级可回避{ duck(){} } //包括基地 雪碧{ x=0; y=0; } //然后创建一个合并的接口 //所需的混音与基本混音同名 接口精灵扩展了可跳转、可躲闪{} //通过将mixin
类
,并与其他一些人一起编写它。我发现这篇文章(以及其他一些类似的文章)展示了一种我认为可以使用的模式:
下面是我的困境的一个例子,使用上面文章中的示例代码作为最小的复制
工作测试ts(原件)
//每个mixin都是一个传统的ES类
类跳线{
跳转(){}
}
班级可回避{
duck(){}
}
//包括基地
雪碧{
x=0;
y=0;
}
//然后创建一个合并的接口
//所需的混音与基本混音同名
接口精灵扩展了可跳转、可躲闪{}
//通过将mixin应用到基类中
//运行时的JS
applyMixins(精灵,[可跳,可躲]);
让玩家=新精灵();
player.jump();
console.log(player.x,player.y);
//这可以存在于代码库中的任何位置:
函数applyMixins(DerivedActor:any,构造函数:any[]){
构造函数.forEach((baseCtor)=>{
Object.getOwnPropertyNames(baseCtor.prototype).forEach((名称)=>{
Object.defineProperty(
derivedCtor.prototype,
名称
Object.getOwnPropertyDescriptor(baseCtor.prototype,名称)
);
});
});
}
上面的代码运行正常,但是如果我们添加另一个中间类,比如说Fairy
,然后让Sprite
扩展它,我们将遇到一个错误:
断开。测试。ts
//每个mixin都是一个传统的ES类
类跳线{
跳转(){}
}
班级可回避{
duck(){}
}
班仙{
z=“z”
}
//包括基地
类精灵扩展精灵{
x=0;
y=0;
}
//然后创建一个合并的接口
//所需的混音与基本混音同名
接口精灵扩展了可跳转、可躲闪{}
//通过将mixin应用到基类中
//运行时的JS
applyMixins(精灵,[可跳,可躲]);
让玩家=新精灵();
player.jump();
console.log(player.x,player.y);
//这可以存在于代码库中的任何位置:
函数applyMixins(DerivedActor:any,构造函数:any[]){
构造函数.forEach((baseCtor)=>{
Object.getOwnPropertyNames(baseCtor.prototype).forEach((名称)=>{
Object.defineProperty(
derivedCtor.prototype,
名称
Object.getOwnPropertyDescriptor(baseCtor.prototype,名称)
);
});
});
}
这将引发以下错误:
TypeError: Cannot call a class as a function
引发错误的特定行是Sprite类的实例化:
let player=新精灵();
根据我所看到的每一篇关于该错误的帖子,解决方案是使用new
关键字调用该类。。。但这已经发生了
我很不明白为什么会发生这样的事情,感觉好像TypeScript内部隐藏的东西正在破裂
编辑
事实证明,这些文件只有在我使用Jest运行时才会抛出错误,使用
ts node
或在TypeScript Playworks中运行时才会抛出错误。问题原来是Jest和我的repo中针对它的配置。我正处于将JS回购转换为打字稿的过程中,因此,JETScript还没有正确地设置成打字稿。< /P>
下面是我如何修复它的:
jest.config.js
和babel.config.js
,并从依赖项中删除(现在)不必要的babel
、babel jest
和其他babel插件ts jest
和@types/jest
添加到devdependency
我困惑的主要原因是错误消息导致我在
jest
GH repo上遇到了一个问题,其中(几乎)所有的解决方案实际上都是针对纯JS的,而我正试图将它们应用到TS上。。您的代码中还有其他任何东西可能导致此中断吗?@cherryblossom感谢您尝试重新编程,我可以确认这在操场上确实如预期那样工作。然后我用ts node
在本地运行了我的文件,这同样有效,但是当我用Jest运行这些测试文件时,错误仍然存在,所以这似乎就是问题所在。