吞咽(通过 ts-node) 返回'void'但期望'Task' - 未找到类型 'Task'



有人能帮一个贫穷的(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_1subTask_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+"/"));
};
}

所以,现在一切都很好:-(

相关内容

最新更新