有人能帮一个贫穷的(gulp/typescript(noob写一个typescript吗-gull.js相关问题?
因此,我正在运行everything的最新版本(node、ts-node、gump、ts、@types/gump等(。Gulp在ts节点下/通过ts节点运行(因此使用gulpfile.ts
而不是gulpfile.js
(,我得到以下错误:
error TS2345: Argument of type 'Promise<void>' is not assignable to parameter of type 'Task'.
Type 'Promise<void>' is not assignable to type 'TaskFunction'.
Type 'Promise<void>' provides no match for the signature '(done: TaskCallback): void | EventEmitter | ChildProcess | Stream | Observable<any> | PromiseLike<any>'.
我的(相关(代码是:
gulp.parallel(
subTask("directory_1"),
subTask("directory_2")
);
async function subTask(sDirectory:string){
await gulp.src("src/"+sDirectory+"/*.*")
// Stuff happens here like linting, transpiling, uglifing, etc
.pipe(gulp.dest("dest/"+sDirectory+"/"));
return;
}
当我显式地将目录字符串硬编码到subTask
(即具有subTask
=>subTask_1
和subTask_2
的两个副本(时,该代码有效,但当我参数化subTask
时则无效。
我知道我从subTask
返回了一个void
承诺,而gullow期望得到一种类型的Task
(是TaskFunction
的衍生物(,但我不知道该给subTask
什么类型(给subTask
一种Task
会得到error TS2304: Cannot find name 'Task'
;类似于TaskFunction
(。
那么我做错了什么?更重要的是,我该如何解决它(即,我能提供一些示例代码来解决我的问题吗(。
任何帮助都将不胜感激——谢谢。
干杯
多乐士Oz
函数存在两个问题:第一个问题是它不返回任何内容,另一个问题是声明为async
。虽然gullow流异步运行,但它们不是承诺,因此不必等待,并且没有await
就不需要async
。
所以我建议你把你的功能改为:
function subTask(sDirectory:string) {
return function() {
return gulp.src("src/"+sDirectory+"/*.*")
// Stuff happens here like linting, transpiling, uglifing, etc
.pipe(gulp.dest("dest/"+sDirectory+"/"));
};
}
您的代码的其余部分应该是正常的。
因此,@goto-0给出的答案是99%正确的(非常感谢@goto-0(。然而,一旦我按照建议进行了重构,我就出现了Did you forget to signal async completion?
错误。
完整的、有效的解决方案是使subTask
中的子函数成为异步函数:
function subTask(sDirectory:string) {
return async function() {
return gulp.src("src/"+sDirectory+"/*.*")
// Stuff happens here like linting, transpiling, uglifing, etc
.pipe(gulp.dest("dest/"+sDirectory+"/"));
};
}
所以,现在一切都很好:-(