我正在使用Aurelia Cli,它在大多数情况下都很好用,但有一件事真的让我感到困惑。
我创建了一个新的原型扩展,如下所示:
interface Array<T> {
remove(itemToRemove: T): Array<T>;
}
Array.prototype.remove = function (itemToRemove) {
const index = this.indexOf(itemToRemove);
if (index !== -1) {
this.splice(index, 1);
}
return this;
}
除了保存运行au run --watch
的任何文件时,此工作正常。我会在构建时遇到错误,告诉我remove
不是[]
上的有效方法。这是随机的,大概发生在四次中。如果我什么都没改变再保存就不会再抱怨了。
我怎么能让Aurelia一直对此感到满意?
链接到完整项目:https://github.com/4imble/StackRpg/tree/master/Client/src
答案 0 :(得分:2)
您看到的问题可能是编译器没有一致地提供数组扩展源文件。很可能是因为build script is set up to only compile files if they change。
首先,尝试评论.pipe(changedInPlace({firstPass: true}));
并查看是否开始获得更一致的构建。
如果是这样,您可能必须更新构建脚本,以便始终将该源文件传递给编译器。类似的东西:
let dts = gulp.src(project.transpiler.dtsSource);
let src = gulp.src(project.transpiler.source)
.pipe(changedInPlace({firstPass: true}));
let exts = gulp.src("path/to/extension.ts")
return eventStream.merge(dts, src, exts)
另外,至少在typescript 2.1中,如果我尝试设置一个数组原型,你会抱怨。可以通过以下方式解决:
(<any>Array.prototype).remove = function (...etc